按变量拆分 data.frame 并应用引用具体行的函数

Split data.frame by variable and apply function referring to concrete row

我需要用一些变量拆分 data.frame 并计算每一行的值与其他指定行的值之间的差异。

在下面的示例中,我将 df 除以 v1。然后对于 v3 的每一行计算实际值与 v3[v2 == "C"].

之间的差异
v1 <- rep(1:4,each = 3)
v2 <- rep(c("A","B","C"),4)
v3 <- rep(1:5,3)[1:12]
res <- c(-2,-1,0,3,4,0,-2,-1,0,3,-1,0)
df <- data.frame(v1,v2,v3,res)

df
   v1 v2 v3 res
1   1  A  1  -2
2   1  B  2  -1
3   1  C  3   0
4   2  A  4   3
5   2  B  5   4
6   2  C  1   0
7   3  A  2  -2
8   3  B  3  -1
9   3  C  4   0
10  4  A  5   3
11  4  B  1  -1
12  4  C  2   0

如果可能的话,我更喜欢plyrdata.table

这里有一个数据table解决方案:

library(data.table)
setDT(df)
df[, new := v3 - v3[v2=="C"], by = "v1"]