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

时间:2014-06-20 06:21:53

标签: r

如何创建一个新列,其公式取决于另一行的单元格值

  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的z值,y = current_y_val-1 0(如果不可用)。

我如何实现这一目标。

到目前为止我的进展:

data[data$x == "a" & data$y==2-1,3]

我手动输入值并获得每行的prevY。但是如何在一次拍摄中对所有行进行此操作?

2 个答案:

答案 0 :(得分:2)

在这里,您可以使用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

答案 1 :(得分:2)

data.table解决方案(类似于MrFlick)但对于大数据集更快

library(data.table)
setDT(dat)[, prevY := c(0, z[-length(z)]), by = x]