在所有可能的组合对中组合多个列

时间:2016-09-14 17:53:38

标签: r matrix data-manipulation

我有一个矩阵(比如说)x存在/不存在一些属性,对于1.000名受访者来说有33种不同的属性。数据如下所示:

| P1| P2| P3| P4| P5| P6| P7| P8| P9| P10| P11| P12| P13| P14| P15| P16| P17| P18| P19| P19| P20| P21| P22| P23| P24| P25| P26| P26| P27|P28| P29| P30| P31| P32| P33
|  0|  0|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  1|  0|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  1|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  0|  0|  1|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  1|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  0|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  1|  0|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  1|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  0|  0|  0|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0
|  0|  0|  0|  1|  0|  1|  0|  0|  1|   0|   0|   0|   1|   0|   1|   1|   1|   1|   1|   0|   0|   0|   0|   0|   1|   1|   0|   0|   0|  0|   0|   0|   0|   1|   0

我想创建一个数据框,其中33列的所有可能组合都是可能的,如果在原始矩阵x中,两列的1和{ {1}},否则。

例如,我将使用以下代码获取原始矩阵的第一列和第二列的组合:

0

我应该得到一个包含1,000行(受访者数量)和528个变量的数据框,因为这是矩阵ifelse(x[,i] == 1 & x[,i+1] == 1, 1, 0) 中33列的不同组合对的数量。

在R中有没有一种有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

我们可以使用combn来获取列名的成对组合,列的子集,检查两列的元素是否等于1,转换为数字,cbind

res <- do.call(cbind, combn(colnames(df1), 2,
            FUN = function(x) list(+(df1[x[1]] & df1[x[2]]))))
dim(res)
#[1]  10 528