如何找到具有相同colnames/rownames的行的值之间的差异?

tob*_*tob 0 diff r

我想找到每组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)

Ric*_*ven 5

这是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)