满足忽略 NA

Cumprod ignoring NA

我想生成应用了 comprod 函数的数据框,忽略 NA

x = data.frame(a=c(NA,1,2,3),b=c(NA,5,6,7))

> cumprod(x)
   a  b
1 NA NA
2 NA NA
3 NA NA
4 NA NA

我想要的结果是,

> cumprod(x)
   a   b
1 NA  NA
2  1   5
3  2  30
4  6 210

有什么简单有效的想法吗?

任何东西乘以 1 又只是它本身,所以:

x[] <- lapply(x, function(i) cumprod(replace(i,is.na(i),1)) * ifelse(is.na(i),NA,1) )
x

#   a   b
#1 NA  NA
#2  1   5
#3  2  30
#4  6 210