假设我有这个数据框:
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
知道如何做到这一点吗?
答案 0 :(得分:12)
> combn(names(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
答案 1 :(得分:0)
由于 Thomas 的解决方案不起作用(不再),这里是一个 Base R 解决方案。它返回一个包含两列的所有组合的列表,没有 重复,没有 列与它们的组合。本质上,它是对原始 vectorized
和后续子集的所有列数的 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]])