从R中的数据框创建所有数据集组合

时间:2016-10-19 17:45:54

标签: r

我需要帮助来开发一个代码,用于从R中的数据框创建所有数据集组合。

E.g。 dataframe =

        | A  B  C |
        | 1  4  7 |
        | 2  5  8 |
        | 3  6  9 |

数据集组合:A,B,C,AB,AC,BC,ABC

data1 =

    | A |
    | 1 |
    | 2 |
    | 3 |

data2 =

    | B |
    | 4 |
    | 5 |
    | 6 |

data3 =

    | C |
    | 7 |
    | 8 |
    | 9 |

data4 =

    | A  B | 
    | 1  4 |
    | 2  5 |
    | 3  6 |

data5 =

    | A  C |
    | 1  7 |
    | 2  8 |
    | 3  9 |

data6 =

    | B  C |
    | 4  7 |
    | 5  8 |
    | 6  9 |

data7 = |一个

    | A  B  C |
    | 1  4  7 |
    | 2  5  8 |
    | 3  6  9 |

亲切的问候。

1 个答案:

答案 0 :(得分:0)

以下是使用lapplycombn(获取变量名称组合)的解决方案

colNameSet <- unlist(lapply(seq_len(length(df)),
                           function(i) combn(names(df), i, simplify=FALSE)), recursive=FALSE)

myList <- lapply(colNameSet, function(x) df[x])

1 ... k的向量,其中k是变量的数量,被馈送到lapply,告诉combn每次迭代中要进行的变量组合的大小。由于simplify = FALSE语句,每个combn调用的结果都是一个列表。因此lapply的结果是嵌套列表。带有recursive = FALSE的unlist会使列表变平。

第二行根据每个元素的内容运行此变量名称列表和数据框子集。

返回

 myList
[[1]]
  A
1 1
2 2
3 3

[[2]]
  B
1 4
2 5
3 6
...

[[6]]
  B C
1 4 7
2 5 8
3 6 9

[[7]]
  A B C
1 1 4 7
2 2 5 8
3 3 6 9

数据

df <- data.frame(matrix(1:9, 3))
names(df) <- LETTERS[1:3]