R:当NA为零时,如何在案例中求变量之和
用于说明的假数据:R:当NA为零时,如何在案例中求变量之和,r,na,R,Na,用于说明的假数据: df <- data.frame(a=c(1,2,3,4,5), b=(c(2,2,2,2,NA)), c=c(NA,2,3,4,5))) df以下内容适用于您的特定示例,但我怀疑您的实际用例更复杂: df$count <- apply(df,1,function(x){sum(x == 1:3,na.rm = TRUE)}) > df a b c count 1 1 2 NA 2 2 2 2 2
df <- data.frame(a=c(1,2,3,4,5), b=(c(2,2,2,2,NA)),
c=c(NA,2,3,4,5)))
df以下内容适用于您的特定示例,但我怀疑您的实际用例更复杂:
df$count <- apply(df,1,function(x){sum(x == 1:3,na.rm = TRUE)})
> df
a b c count
1 1 2 NA 2
2 2 2 2 1
3 3 2 3 2
4 4 2 4 1
5 5 NA 5 0
df$count df
a b c计数
1 1 2 NA 2
2 2 2 2 1
3 3 2 3 2
4 4 2 4 1
5 NA 5 0
但这一总体方针应该奏效。例如,您的第二个示例如下:
df$count <- apply(df,1,function(x){sum(x == 2,na.rm = TRUE)})
df$count另一种方法是从data.frame的每一行中减去目标向量,求反,然后使用na.rm=TRUE执行rowSums
:
target <- 1:3
rowSums(!(df-rep(target,each=nrow(df))),na.rm=TRUE)
[1] 2 1 2 1 0
target <- rep(2,3)
rowSums(!(df-rep(target,each=nrow(df))),na.rm=TRUE)
[1] 1 3 1 1 0
target+1是一个很好的问题和一个很好的用户名:)太好了,我需要的一切都完成了!
df$count <- apply(df,1,function(x){sum(x == 2,na.rm = TRUE)})
df$count <- apply(df,1,function(x,compare){sum(x == compare,na.rm = TRUE)},compare = 1:3)
target <- 1:3
rowSums(!(df-rep(target,each=nrow(df))),na.rm=TRUE)
[1] 2 1 2 1 0
target <- rep(2,3)
rowSums(!(df-rep(target,each=nrow(df))),na.rm=TRUE)
[1] 1 3 1 1 0