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

9
假设我有这个数据框:
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

那么我希望获得一组数据框的列表,其中包含任意两列的所有组合,不重复,并避免任何一列与自身重复。也就是说,一个具有以下标题的数据框列表:

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

有没有任何想法来完成这个任务?
2个回答

17
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

抱歉,我指的是所有列的组合,所以我想要一个数据框列表。我正在编辑我的问题,使其更清晰明了。无论如何,谢谢! - user18441
1
哦,我明白了,答案是:combn(X.df,2,simplify=FALSE)。非常感谢! - user18441
1
@user18441,如果这篇文章对您有帮助,请考虑点赞;如果解决了您的问题,请考虑采纳它。 - A5C1D2H2I1M1N2O1R2T1
7
这个方法不起作用,它返回数据集中所有变量名称的组合。 - Hercules Apergis

1
由于Thomas的解决方案不再适用,这里提供一个基于R语言的解决方案。它返回一个列表,其中包含两列之间所有不重复的组合,且不包括自身组合。本质上,它是对原始数据框中所有列数进行lapply()向量化和combn()命令的子集操作。 数据
> 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接