如何获得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 列的显示成员?