R 计算不同序列的累积乘积

R 计算不同序列的累积乘积,r,R,我有以下数据表: ` 我想为零之间的序列做一个累加积,这样我可以得到以下结果: 我需要对几个大型数据集执行此操作,但找不到有效的计算方法。我希望有人能帮忙,并提前表示感谢 > y=rle(!!x) > y$values=1:length(y$values) > ave(x,inverse.rle(y),FUN = cumprod) [1] 0 0 3 3 9 36 180 1080 0 0 3 15 105 编写

我有以下数据表:

`

我想为零之间的序列做一个累加积,这样我可以得到以下结果:

我需要对几个大型数据集执行此操作,但找不到有效的计算方法。我希望有人能帮忙,并提前表示感谢

> y=rle(!!x)
> y$values=1:length(y$values)
> ave(x,inverse.rle(y),FUN = cumprod)
 [1]    0    0    3    3    9   36  180 1080    0    0    3   15  105
编写一个函数并将其应用于data.frame:

f=function(x){
  y=rle(!!x)#(x!=0)
  y$values=1:length(y$values)
  ave(x,inverse.rle(y),FUN = cumprod)
}

rapply(df1,f,"numeric",how="replace")
   V1   V2
1   0    0
2   1    0
3   3    3
4   6    3
5   0    9
6   0   36
7   5  180
8   5 1080
9  10    0
10  0    0

这里有一个使用
rle
cumprod
的选项。我们使用
lappy
循环遍历数据集的列,使用
rle
创建分组列,然后使用
ave
获得累积乘积(
cumprod


df1[]不要将数据作为图像发布,请学习如何给出一个您可能可以使用
?cumprod
对累积产品和
?数据进行分组的图像。table::rleid
按零分组。右。我在测试前写过。删除了我的噪音,没关系。它发生了:)我想我已经看到了那个模因:“噪音发生了”。从没听说过那个哈哈
df1[] <- lapply(df1, function(x) {
           r1 <- rle(x!=0)
           ave(x, rep(seq_along(r1$values), r1$lengths), FUN = cumprod) 
         })
df1
#   V1   V2
#1   0    0
#2   1    0
#3   3    3
#4   6    3
#5   0    9
#6   0   36
#7   5  180
#8   5 1080
#9  10    0
#10  0    0
df1 <- data.frame(V1 = c(0, 1, 3, 2, 0, 0, 5, 1, 2, 0),
     V2 = c(0, 0, 3, 1, 3, 4, 5, 6, 0, 0))