为 R 中的给定操作计算一对变量的组合

Compute combination of a pair variables for a given operation in R

来自给定的数据框:

# Create dataframe with 4 variables and 10 obs
set.seed(1)
df<-data.frame(replicate(4,sample(0:1,10,rep=TRUE)))

我想计算一个 减法操作 之间的所有列组合成对 ,但只保留一个子,即 column A- column B 但不是 column B-column A 等等。

我得到的是非常手动的,当变量很多时,这往往不是那么容易。

# Result
df_result <- as.data.frame(list(df$X1-df$X2,
df$X1-df$X3,
df$X1-df$X4,

df$X2-df$X3,
df$X2-df$X4,

df$X3-df$X4))

特征名称的 colname 也应该描述操作,即 (x1_x2) 是 x1-x2

您可以使用组合:

COMBI = combn(colnames(df),2)
res = data.frame(apply(COMBI,2,function(i)df[,i[1]]-df[,i[2]]))
colnames(res) = apply(COMBI,2,paste0,collapse="minus")

head(res)
  X1minusX2 X1minusX3 X1minusX4 X2minusX3 X2minusX4 X3minusX4
1         0         0        -1         0        -1        -1
2         1         1         0         0        -1        -1
3         0         0         0         0         0         0
4         0         0        -1         0        -1        -1
5         1         1         1         0         0         0
6        -1         0         0         1         1         0