[英]Combine multiple columns in all possible pairs of combinations
對於 1.000 名受訪者,我有一個矩陣(比如) x
,表示 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
和0
,則對於 1,000 名受訪者中的每一個都有1
,否則。
例如,我將使用以下代碼獲取原始矩陣的第一列和第二列的組合:
ifelse(x[,i] == 1 & x[,i+1] == 1, 1, 0)
我最終應該得到一個包含 1,000 行(受訪者數量)和 528 個變量的數據框,因為這是矩陣x
33 列的不同組合對的數量。
在 R 中有沒有一種有效的方法來實現這一點?
我們可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.