与上一行值Mutate Cumsum
问题描述:
我想在两个单独的列上运行一个数据帧上的cumsum。它们基本上是针对两个不同变量的事件列表。数据框中每行只有一个变量可以记录事件。我攻击这个问题的方式是创建一个新变量,保存值为'1',并创建两个新列以对变量总和求和。这工作正常,我可以得到正确的事件总数,但我遇到的问题是,在我当前的ifelse语句中,如果记录的事件是变量“A”,则变量“B”被赋值为0。 ,对于每一行,我都希望将前一个变量的值分配给当前行,这样我就不会在从1到2到0到3的间隙结束。与上一行值Mutate Cumsum
我不'要想在这个上进行总结,我宁愿保留每个记录的实例并通过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
-function:
DF$Total.A <- cumsum(DF$variable=="A")
或者作为一个更一般的方法,通过@Frank只要你可以这样做:
uv = unique(as.character(DF$Variable))
DF[, paste0("Total.",uv)] <- lapply(uv, function(x) cumsum(DF$V == x))
答
如果有许多层级的因素,你可以通过虚拟编码得到这一行,然后用矩阵表示。
X <- model.matrix(~Variable+0, DF)
apply(X, 2, cumsum)
'mydf $ Total.A Heroka
@贺冈点,非常感谢!有没有办法将评论标记为答案? – wetcoaster