[英]how to sum columns based on ifelse condition in r
我正在嘗試將所有列與 if else 條件替換 null 值與 999 如果不是 999 它應該添加所有列可以有人說得更好,我通過使用這個得到了錯誤的值,
就像需要添加列的總和,然后最后添加所有列的總和
總和((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,並且其中的 rest 保持原樣。
數據
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 的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.