例:

df <- data.frame(A=1:5, B=seq(0,10,2), C=seq(0,15,3))
df
A  B  C
1  2  3
2  4  6
3  6  9
4  8 12
5 10 15

我想要的是:
A B C (A-B) (A-C) (B-C)
1 2 3 -1 -2 -1
2 4 6 -2 -4 -2
3 6 9 -3 -6 -3
4 8 12 -4 -8 -4
5 10 15 -5 -10 -5

这是一个示例。在我的问题中,我有超过100列
关于如何在R中执行此操作的任何建议?

最佳答案

我们可以在FUN中使用combn参数

combn(seq_along(df), 2, FUN = function(x) df[,x[1]]- df[,x[2]])
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]   -1   -2    0   -2   -1    1   -1    2    0    -2
#[2,]   -2   -4   -4   -7   -2   -2   -5    0   -3    -3
#[3,]   -3   -6   -8  -12   -3   -5   -9   -2   -6    -4
#[4,]   -4   -8  -12  -17   -4   -8  -13   -4   -9    -5
#[5,]   -5  -10  -16  -22   -5  -11  -17   -6  -12    -6

另外,combndata.frame作为参数,所以简单
combn(df, 2, FUN = function(x) x[,1]-x[,2])
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]   -1   -2    0   -2   -1    1   -1    2    0    -2
#[2,]   -2   -4   -4   -7   -2   -2   -5    0   -3    -3
#[3,]   -3   -6   -8  -12   -3   -5   -9   -2   -6    -4
#[4,]   -4   -8  -12  -17   -4   -8  -13   -4   -9    -5
#[5,]   -5  -10  -16  -22   -5  -11  -17   -6  -12    -6

数据
df <- data.frame(A=1:5, B=seq(2,10,2), C=seq(3,15,3), d=seq(1,25,5), e=seq(3,31,6))

关于r - R-如何在数据框中生成列的所有组合的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41819797/

10-11 05:22
查看更多