我正在尝试创建一个新的向量,它是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
Run Code Online (Sandbox Code Playgroud)
我希望结果为
1,3,7,6 .我想我可以创建每个向量的新版本,其中我用0替换NA,但是当应用于35个向量时,这将是很多工作.有一个简单的功能可以帮助我吗?
42-*_*42- 32
也可以使用这个rowSums功能:
rowSums( cbind (col1,col2,col3), na.rm=TRUE)
#[1] 1 3 7 6
?rowSums # also has colSums described on same help page
Run Code Online (Sandbox Code Playgroud)
首先将它们放在矩阵中:
apply(cbind(col1,col2,col3),1,sum,na.rm = TRUE)
[1] 1 3 7 6
Run Code Online (Sandbox Code Playgroud)
您可以使用R的内置文档阅读有关每个功能的内容:?apply,?cbind.
cbind 代表"列绑定":它需要几个向量或数组,并将它们"按列"绑定到一个数组中:
cbind(col1,col2,col3)
col1 col2 col3
[1,] NA 1 NA
[2,] 1 2 NA
[3,] 2 3 2
[4,] 3 NA 3
Run Code Online (Sandbox Code Playgroud)
apply好吧,将一个函数(sum在这种情况下)应用于矩阵的行或列.这允许我们使用na.rm = TRUE参数来sum删除NA值.