【问题标题】:How to obtain all combinations of the columns of a data frame taken by 2?如何获得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

知道怎么做吗?

【问题讨论】:

    标签: r dataframe combinations


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      相关资源
      最近更新 更多