我想找到每组2个组合之间的差异,按列分组A.
输入数据:
A B
11 320836
11 5719750
6 29911154
6 29912280
6 29912285
Run Code Online (Sandbox Code Playgroud)
以下是预期的输出:
A B C Difference
11 320836 5719750 5398914
6 29911154 29912280 1126
6 29911154 29912285 1131
6 29912280 29912285 5
Run Code Online (Sandbox Code Playgroud)
这是data.table包的可能性.
library(data.table)
Run Code Online (Sandbox Code Playgroud)
我们可以通过使用diff()内部combn()分组来快速计算差异A.
setDT(df)[, combn(B, 2, diff), by = A]
# A V1
# 1: 11 5398914
# 2: 6 1126
# 3: 6 1131
# 4: 6 5
Run Code Online (Sandbox Code Playgroud)
要获得所有必需的列,我们可以做更多的工作.该combn()函数可用于获取两个元素的组合.然后我们可以从结果中为三个新列创建一个命名列表combn().所有这些都归为一组A.
setDT(df)[, {
cmb <- combn(B, 2)
.(B = cmb[1, ], C = cmb[2, ], Diff = cmb[2, ] - cmb[1, ])
}, by = A]
# A B C Diff
# 1: 11 320836 5719750 5398914
# 2: 6 29911154 29912280 1126
# 3: 6 29911154 29912285 1131
# 4: 6 29912280 29912285 5
Run Code Online (Sandbox Code Playgroud)