R 使用前一行值对Cumsum进行变异
我试图在两个单独的列上的数据帧上运行一个cumsum。它们本质上是两个不同变量的事件列表。数据帧中每行只能记录一个变量的事件。我解决这个问题的方法是创建一个新变量,保存值“1”,并创建两个新列来汇总变量总数。这很好,我可以得到正确的事件总数,但我遇到的问题是,在我当前的ifelse语句中,如果记录的事件是针对变量“A”,那么变量“B”被指定为0。但是,对于每一行,我希望将前一个变量的值指定给当前行,这样就不会在1到2、0到3之间出现间隙 我也不想在上面运行summary,我更愿意保留每个记录的实例,并通过mutate运行新的列 当前DF:R 使用前一行值对Cumsum进行变异,r,dplyr,R,Dplyr,我试图在两个单独的列上的数据帧上运行一个cumsum。它们本质上是两个不同变量的事件列表。数据帧中每行只能记录一个变量的事件。我解决这个问题的方法是创建一个新变量,保存值“1”,并创建两个新列来汇总变量总数。这很好,我可以得到正确的事件总数,但我遇到的问题是,在我当前的ifelse语句中,如果记录的事件是针对变量“A”,那么变量“B”被指定为0。但是,对于每一行,我希望将前一个变量的值指定给当前行,这样就不会在1到2、0到3之间出现间隙 我也不想在上面运行summary,我更愿意保留每个记录的实
Event Value Variable Total.A Total.B
1 1 A 1 0
2 1 A 2 0
3 1 B 0 1
4 1 A 3 0
预期结果:
Event Value Variable Total.A Total.B
1 1 A 1 0
2 1 A 2 0
3 1 B 2 1
4 1 A 3 1
谢谢 可以使用布尔函数的特性,将它们相加为1和0。因此,您可以使用
cumsum
-函数:
DF$Total.A <- cumsum(DF$variable=="A")
DF$Total.A您可以使用布尔值的属性,将它们相加为1和0。因此,您可以使用cumsum
-函数:
DF$Total.A <- cumsum(DF$variable=="A")
DF$Total.A如果您的因子有多个级别,您可以通过虚拟编码在一行中得到它,然后对矩阵进行cumsum
运算
X <- model.matrix(~Variable+0, DF)
apply(X, 2, cumsum)
X如果你的因子有多个级别,你可以通过虚拟编码,然后对矩阵进行cumsum
运算,在一行中得到它
X <- model.matrix(~Variable+0, DF)
apply(X, 2, cumsum)
X确实mydf$Total.A@Heroka现场,非常感谢!有没有办法将评论标记为答案?有没有mydf$Total.a@Heroka spot on,非常感谢!有没有办法将评论标记为答案?