簡體   English   中英

如何根據 r 中的 ifelse 條件對列進行求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM