考虑下面的命名向量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
个值.许多R函数都有一个参数na.rm
,它在计算之前删除了NA
个元素.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
但这似乎太过分了,并且产生了很多新的作业(job)/副本.我相信有更好的办法.
What better methods are there to return the cumulative sum while effectively ignoring NA
values?