如何在r中基于ifelse条件求和列

  • 本文关键字:ifelse 条件 求和 r
  • 更新时间 :
  • 英文 :


我正试图用if-else条件将所有列相加,用999替换空值。如果不是999,它应该添加所有列。有人能告诉我更好的一个,我使用这个得到了错误的值,

需要添加列的总和,然后最后添加所有列的总和

sum((A1a(i(+A2b(i((

sum((ifelse((df$A1a!= 999), df$A1a,0)+
ifelse((df$A2b!= 999), df$A2b,0)+
ifelse((df$A3c!= 999), df$A3c,0))

示例:

A B C  D
# 1 4 7 10
# 2 5 8 11
# 1 3 1 1

if B!=1 (4+5+3)
if  C!=1 then add (7+8) for c and 
if D! = 1for (10+11)
finally (12+15+21)=48

您可以使用:

cols <- c('A', 'B', 'C', 'D')
sum(df[cols] * (df[cols] != 1))
#[1] 50

df != 1将返回TRUE/FALSE值,该值乘以df,因此所有的1都变为0,其余的保持原样

数据

df <- structure(list(A = c(1L, 2L, 1L), B = c(4L, 5L, 3L), C = c(7L, 
8L, 1L), D = c(10L, 11L, 1L)), class = "data.frame", row.names = c(NA, -3L))

您可以使用条件!=1来子集,sum来结果:

y <- x[-1]
#y <- x[c("B","C","D")] #Alternativ
sum(y[y!=1])
#[1] 48

数据

x <- data.frame(A=c(1,2,1), B=c(4,5,3), C=c(7,8,1), D=c(10,11,1))

您可以将其转换为数字矢量

sum(as.matrix(df)[df != 999])

然而,不需要转换为999,因此您可以进行

sum(as.matrix(df)[is.na(df)])

并保留na的

最新更新