我有一个矩阵(比如说)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中有没有一种有效的方法来实现这一目标?
答案 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