将数据框中的所有列配对到 R 中的列表中

Pair all columns from dataframe into a list in R

假设我在 R 中有一个包含 4 列(a、b、c、d)的数据框。我想编写一个函数,它在列表列表中提供以下输出: (a,b), (a,c), (a,d), (b,c), (b,d), (c,d)

显然我不想要像 (a,b) 和 (b,a) 这样的重复项,因为在这种情况下它们是相同的。

?combn 与要为 data.frame 的名称的每个组合调用的函数一起使用。

df1 <- mtcars[1:4]

combn(names(df1), 2, function(x){
  d <- df1[x]
  names(d) <- x
  d
}, simplify = FALSE)

使用以下数据:

df <- data.frame(a = 1,
                 b = 2,
                 c = 3,
                 d = 4)

您可以使用此公式创建列名列表:

df.list <- split(t(combn(names(df), 2)), seq(nrow(t(combn(names(df), 2)))))

> df.list
$`1`
[1] "a" "b"

$`2`
[1] "a" "c"

$`3`
[1] "a" "d"

$`4`
[1] "b" "c"

$`5`
[1] "b" "d"

$`6`
[1] "c" "d"

如果您还愿意显示这些专栏的内容,您可以跟进:

for (i in 1:length(df.list)) {
  df.list[[i]] <- df[df.list[[i]]]
}

> df.list
$`1`
  a b
1 1 2

$`2`
  a c
1 1 3

$`3`
  a d
1 1 4

$`4`
  b c
1 2 3

$`5`
  b d
1 2 4

$`6`
  c d
1 3 4