Calcule cumsum () mientras ignora los valores de NA
Considere el siguiente vector nombradox
.
( 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
Me gustaría calcular la suma acumulativa dex
mientras ignora elNA
valores. Muchas funciones R tienen un argumentona.rm
que eliminaNA
elementos previos a los cálculos.cumsum()
no es uno de ellos, lo que hace que esta operación sea un poco complicada.
Puedo hacerlo de esta manera.
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
Pero esto parece excesivo y hace muchas nuevas asignaciones / copias. Estoy seguro de que hay una mejor manera.
¿Qué mejores métodos existen para devolver la suma acumulada mientras se ignora efectivamente NA
¿valores?