web-dev-qa-db-ja.com

多くのベクターの合計。行単位または要素単位、ただしNA値は無視

他の35個のベクトルを合計した新しいベクトルを作成しようとしています。問題はNA値がたくさんあることですが、この特定の用途では、それらをゼロとして扱いたいと思います。 35のベクトルのいずれかにNAが含まれている場合、結果はNAになるため、ベクトルを追加しても機能しません。これは問題の例です:

col1<-c(NA,1,2,3)
col2<-c(1,2,3,NA)
col3<-c(NA,NA,2,3)
Sum<-col1+col2+col3
Sum
# [1] NA NA  7 NA

結果を1、3、7、6にしたい。
NAを0に置き換えた各ベクターの新しいバージョンを作成できると思いますが、35個のベクターに適用すると、多くの作業になります。私を助ける簡単な機能はありますか?

18
user2980491

rowSums関数を使用することもできます:

rowSums( cbind (col1,col2,col3), na.rm=TRUE)
#[1] 1 3 7 6

?rowSums   # also has colSums described on same help page
32
42-

最初にそれらを行列に入れます:

apply(cbind(col1,col2,col3),1,sum,na.rm = TRUE)
[1] 1 3 7 6

Rの組み込みドキュメントを使用して、ここで各関数について読むことができます:?apply?cbind

cbindは「列バインド」の略です。複数のベクトルまたは配列を受け取り、それらを「列ごと」に1つの配列にバインドします。

cbind(col1,col2,col3)
     col1 col2 col3
[1,]   NA    1   NA
[2,]    1    2   NA
[3,]    2    3    2
[4,]    3   NA    3

apply、まあ、applies関数(この場合はsum)を行列の行または列に適用します。これにより、na.rm = TRUE引数をsumに追加すると、NA値が削除されます。

7
joran