我正在尝试在两个单独的列上的数据框上运行cumsum。它们基本上是针对两个不同变量的事件列表。只有一个变量可以在数据帧中每行记录一个事件。我解决问题的方法是创建一个新变量,保持值为'1',并创建两个新列来对变量总和进行求和。这样工作正常,我可以得到正确的总发生次数,但我遇到的问题是,在我当前的ifelse语句中,如果记录的事件是变量“A”,则变量“B”被赋值为0.但是,对于每一行,我希望将前一个变量的值赋给当前行,这样我就不会得到从1到2,到0到3的间隙。
我也不想对此进行总结,我宁愿保留每个记录的实例并通过mutate运行新的列。
CURRENT 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
谢谢!
答案 0 :(得分:4)
你可以使用布尔值的属性,你可以将它们加为1和0。因此,您可以使用cumsum
- 函数:
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))
答案 1 :(得分:0)
如果你的因子有很多级别,你可以通过虚拟编码在一行中得到这个,然后X <- model.matrix(~Variable+0, DF)
apply(X, 2, cumsum)
矩阵。
link_to