Сумма строк (с NA) в R

У меня есть data.frame «данные» со столбцами «var1» ... «var3». Теперь я хотел бы вычислить новую «сумму» столбца из трех столбцов var. К сожалению, в каждой строке только одна переменная из трех имеет значение:

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

Должен ли я сначала заменить NA на 0, чтобы вычислить столбец суммы, или есть более элегантный способ? Спасибо!


person D. Studer    schedule 01.11.2017    source источник


Ответы (2)


Мы можем использовать rowSums

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

Кроме того, если есть только один элемент, отличный от NA, другой вариант -

do.call(pmax, c(df1[1:3], na.rm = TRUE))
person akrun    schedule 01.11.2017
comment
Спасибо! Вот что я искал! - person D. Studer; 01.11.2017

Используя 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")]
person nghauran    schedule 01.11.2017