我正试图用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的