按变量拆分 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
如果可能的话,我更喜欢plyr
或data.table
。
这里有一个数据table解决方案:
library(data.table)
setDT(df)
df[, new := v3 - v3[v2=="C"], by = "v1"]
我需要用一些变量拆分 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
如果可能的话,我更喜欢plyr
或data.table
。
这里有一个数据table解决方案:
library(data.table)
setDT(df)
df[, new := v3 - v3[v2=="C"], by = "v1"]