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,我想求和。
按照建议,我post在这里回答。
这是 apply
。 df[-1]
是排除第一列(不是数字),x[x == 1]
是对 x
的元素进行子集化(由于 1
的单行apply) 只有值 1.
df$TOTAL <- apply(df[-1], 1, function(x) sum(x[x == 1], na.rm = T))
另一种(我敢打赌更快而且)更容易在 base 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
我是 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,我想求和。
按照建议,我post在这里回答。
这是 apply
。 df[-1]
是排除第一列(不是数字),x[x == 1]
是对 x
的元素进行子集化(由于 1
的单行apply) 只有值 1.
df$TOTAL <- apply(df[-1], 1, function(x) sum(x[x == 1], na.rm = T))
另一种(我敢打赌更快而且)更容易在 base 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