如何创建公式依赖于另一行的单元格值的新列
x y z
1 a 1 10
2 a 2 20
3 a 3 30
4 b 1 40
这是我的样本数据。我希望最终输出如下所示
x y z prevY
1 a 1 10 0
2 a 2 20 10
3 a 3 30 20
4 b 1 40 0
其中prevY是x=current_x_val和y=current_y_val-1的z值,如果不可用则为0。
我如何做到这一点。
My progress so far:
data[data$x == "a" & data$y==2-1,3]
我手动输入值并获取每行的prevY。但是我如何在一个单一的镜头中为所有行做呢?
或者data.table
解决方案(类似于MrFlick),但对于大数据集来说速度更快
library(data.table)
setDT(dat)[, prevY := c(0, z[-length(z)]), by = x]
在这里,您可以使用ave()
函数进行组级转换(这里,对每个x值进行不同的转换)。
dd$prevY <- with(dd, ave(z, x, FUN=function(x) head(c(0,x),-1)))
在这里,我们取每个x值对应的z值,在前面加一个零,并删除最后一个值。然后我们把它赋值给data.frame.
假设所有y
值都在每个x
组中排序。
结果
x y z prevY
1 a 1 10 0
2 a 2 20 10
3 a 3 30 20
4 b 1 40 0