【问题标题】:Pair all columns from dataframe into a list in R将数据框中的所有列配对到 R 中的列表中
【发布时间】:2021-07-16 09:30:45
【问题描述】:

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

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

【问题讨论】:

  • 到目前为止您尝试了哪些方法,为什么没有成功?请记住,SO 不是代码编写服务。社区很乐意帮助您解决您在开发代码时遇到的问题,但它不太愿意为您完成工作。
  • 您希望列的内容在列表中还是仅在标题中?

标签: r list nested-lists


【解决方案1】:

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

df1 <- mtcars[1:4]

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

【讨论】:

  • 你可以做combn(df1, 2, simplify = FALSE)
  • @Roland 是的,当然。为什么我没看到:(?
【解决方案2】:

使用以下数据:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多