Рассмотрим следующий именованный вектор x
.
( x <- setNames(c(1, 2, 0, NA, 4, NA, NA, 6), letters[1:8]) )
# a b c d e f g h
# 1 2 0 NA 4 NA NA 6
Я хотел бы вычислить суммарную сумму x
, игнорируя значения NA
. Поскольку аргумент na.rm
для cumsum()
отсутствует, это немного сложно.
Я могу сделать это таким образом.
y <- setNames(numeric(length(x)), names(x))
z <- cumsum(na.omit(x))
y[names(y) %in% names(z)] <- z
y[!names(y) %in% names(z)] <- x[is.na(x)]
y
# a b c d e f g h
# 1 3 3 NA 7 NA NA 13
Но это кажется чрезмерным и делает много новых заданий/копий. Я уверен, что есть лучший способ.
Какие лучшие методы возвращают кумулятивную сумму при эффективном игнорировании значений NA
?