创建一个新列,其公式依赖于另一行的单元格值



如何创建公式依赖于另一行的单元格值的新列

  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

相关内容

最新更新