Cumprod无视NA

时间:2017-08-18 05:43:10

标签: r 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 个答案:

答案 0 :(得分:2)

任何乘以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