Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用前一行值对Cumsum进行变异_R_Dplyr - Fatal编程技术网

R 使用前一行值对Cumsum进行变异

R 使用前一行值对Cumsum进行变异,r,dplyr,R,Dplyr,我试图在两个单独的列上的数据帧上运行一个cumsum。它们本质上是两个不同变量的事件列表。数据帧中每行只能记录一个变量的事件。我解决这个问题的方法是创建一个新变量,保存值“1”,并创建两个新列来汇总变量总数。这很好,我可以得到正确的事件总数,但我遇到的问题是,在我当前的ifelse语句中,如果记录的事件是针对变量“A”,那么变量“B”被指定为0。但是,对于每一行,我希望将前一个变量的值指定给当前行,这样就不会在1到2、0到3之间出现间隙 我也不想在上面运行summary,我更愿意保留每个记录的实

我试图在两个单独的列上的数据帧上运行一个cumsum。它们本质上是两个不同变量的事件列表。数据帧中每行只能记录一个变量的事件。我解决这个问题的方法是创建一个新变量,保存值“1”,并创建两个新列来汇总变量总数。这很好,我可以得到正确的事件总数,但我遇到的问题是,在我当前的ifelse语句中,如果记录的事件是针对变量“A”,那么变量“B”被指定为0。但是,对于每一行,我希望将前一个变量的值指定给当前行,这样就不会在1到2、0到3之间出现间隙

我也不想在上面运行summary,我更愿意保留每个记录的实例,并通过mutate运行新的列

当前DF:

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,非常感谢!有没有办法将评论标记为答案?