例:
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
另外,
combn
以data.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/