R中行的总和(NA和#39; s)

时间:2017-11-01 15:05:53

标签: r sum summarize

我有一个data.frame"数据"列#34; var1" ......" var3"。现在,我想计算一个新专栏" sum"来自三个var-columns。不幸的是,在每一行中,三个中只有一个变量有一个值:

var1  var2  var3  sum
NA    NA    300   300
20    NA    NA     20
10    NA    NA     10

为了计算总和列,我是否必须首先用0替换NA?还是有更优雅的方式?谢谢!

2 个答案:

答案 0 :(得分:3)

我们可以使用rowSums

df1$sum <- rowSums(df1[grep("^var\\d+", names(df1))], na.rm = TRUE)

此外,如果只有一个非NA元素,则另一个选项是

do.call(pmax, c(df1[1:3], na.rm = TRUE))

答案 1 :(得分:2)

使用data.table,您还可以尝试:

df <- data.frame(var1 = c(NA, 20, 10),
                 var2 = c(NA, NA, NA),
                 var3 = c(300, NA, NA))
library(data.table)
dt <- as.data.table(df)
dt[, sum := rowSums(.SD, na.rm = TRUE), .SDcols = c("var1", "var2", "var3")]