如何获得2取的数据框列的所有组合?

Posted

技术标签:

【中文标题】如何获得2取的数据框列的所有组合?【英文标题】:How to obtain all combinations of the columns of a data frame taken by 2? 【发布时间】:2013-08-20 08:46:55 【问题描述】:

假设我有这个数据框:

matrix(c(2,4,3,1,5,7,1,2,3,5,8,2,4,5,1,1,3,6,1,3,4,5,6,1),nrow=6,ncol=4,byrow = TRUE)->X
as.data.frame(X)->X.df

  V1 V2 V3 V4
1  2  4  3  1
2  5  7  1  2
3  3  5  8  2
4  4  5  1  1
5  3  6  1  3
6  4  5  6  1

然后我想获得一组数据框的列表,其中包含 2 所取列的所有组合,不重复,并避免任何列本身。这意味着,具有以下标头的数据帧列表:

V1,V2
V1,V3
V1,V4
V2,V3
V2,V4
V3,V4

知道怎么做吗?

【问题讨论】:

【参考方案1】:
combn(X.df, 2, simplify=FALSE)
[[1]]
  V1 V2
1  2  4
2  5  7
3  3  5
4  4  5
5  3  6
6  4  5

[[2]]
  V1 V3
1  2  3
2  5  1
3  3  8
4  4  1
5  3  1
6  4  6

[[3]]
  V1 V4
1  2  1
2  5  2
3  3  2
4  4  1
5  3  3
6  4  1

[[4]]
  V2 V3
1  4  3
2  7  1
3  5  8
4  5  1
5  6  1
6  5  6

[[5]]
  V2 V4
1  4  1
2  7  2
3  5  2
4  5  1
5  6  3
6  5  1

[[6]]
  V3 V4
1  3  1
2  1  2
3  8  2
4  1  1
5  1  3
6  6  1

【讨论】:

对不起,我的意思是所有的列组合,所以我想要一个数据框列表。我现在正在编辑我的问题以使其更清楚。还是谢谢你! oohh 我看到答案是:combn(X.df,2,simplify=FALSE)。非常感谢! @user18441,如果这有帮助,请考虑投票;如果它解决了您的问题,请考虑接受它。 这不起作用;它返回数据集所有变量名称的组合。【参考方案2】:

由于 Thomas 的解决方案(不再适用),这里有一个 Base R 解决方案。它返回两列没有重复和没有列组合的所有组合列表。本质上,它是一个lapply()-vectorized combn()-command,超过原始data.frame 的所有列数和后续子集。

数据

> X.df
  V1 V2 V3 V4
1  2  4  3  1
2  5  7  1  2
3  3  5  8  2
4  4  5  1  1
5  3  6  1  3
6  4  5  6  1

代码

df_list <- lapply(1:(ncol(combn(1:ncol(X.df), m = 2))), 
               function(y) X.df[, combn(1:ncol(X.df), m = 2)[,y]]) 

输出

> df_list 
[[1]]
  V1 V2
1  2  4
2  5  7
3  3  5
4  4  5
5  3  6
6  4  5

[[2]]
  V1 V3
1  2  3
2  5  1
3  3  8
4  4  1
5  3  1
6  4  6

[[3]]
  V1 V4
1  2  1
2  5  2
3  3  2
4  4  1
5  3  3
6  4  1

[[4]]
  V2 V3
1  4  3
2  7  1
3  5  8
4  5  1
5  6  1
6  5  6

[[5]]
  V2 V4
1  4  1
2  7  2
3  5  2
4  5  1
5  6  3
6  5  1

[[6]]
  V3 V4
1  3  1
2  1  2
3  8  2
4  1  1
5  1  3
6  6  1

【讨论】:

以上是关于如何获得2取的数据框列的所有组合?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中获取 dataGridView 中所有 Combobox 列的显示成员?

将数据添加到已存在组合框列的 dataGridView 行

迭代获取数据框列的最大值,加一并重复 r 中的所有行

分别绘制所有 pandas 数据框列

如何将数据框列的分类值转换为 sckikit-learn 中的单热编码列?

计算数据框列中列表的所有排列