簡體   English   中英

R如何做部分行總和

[英]R how to do the partial row sums

我對 R 很陌生,我真誠地感謝您的幫助。

以下是我的部分數據:

subjectID  A B C D E F G H I J
S001       1 1 1 1 1 0 0
S002       1 1 1 0 0 0 0 

我想對從 A 到 J 的行求和,因此數據將如下所示:

subjectID A B C D E F G H I J TOTAL
S001      1 1 1 1 1 0 0        5
S002      1 1 1 0 0 0 0        3

非常感謝! 如果變量 A 到 J == 1,我想要求和。

按照建議,我在這里發布我的答案。 這是與apply df[-1]是排除第一列(不是數字), x[x == 1]是將x的元素(由於應用的1導致的單行)僅具有以下值的子集1.

 df$TOTAL <- apply(df[-1], 1, function(x) sum(x[x == 1], na.rm = T))

另一個(我敢打賭更快且更容易在基礎 R 中編碼的方法是:

df$TOTAL <- rowSums(df[-1] == 1, na.rm = T)

兩者都有結果

df
  subjectID A B C D E F G  H  I  J TOTAL
1      S001 1 1 1 1 1 0 0 NA NA NA     5
2      S002 1 1 1 0 0 0 0 NA NA NA     3

數據

df <- structure(list(subjectID = structure(1:2, .Label = c("S001", 
"S002"), class = "factor"), A = c(1L, 1L), B = c(1L, 1L), C = c(1L, 
1L), D = c(1L, 0L), E = c(1L, 0L), F = c(0L, 0L), G = c(0L, 0L
), H = c(NA, NA), I = c(NA, NA), J = c(NA, NA)), .Names = c("subjectID", 
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), class = "data.frame", row.names = c(NA, 
-2L))

另一個與 SabDeM 發布的選項類似的選項,但使用sapply僅對數字列求和

df$Total <- rowSums(df[ ,sapply(df, is.numeric)])

輸出:

  subjectID A B C D E F G  H  I  J Total
1      S001 1 1 1 1 1 0 0 NA NA NA     5
2      S002 1 1 1 0 0 0 0 NA NA NA     3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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