簡體   English   中英

在所有可能的組合中組合多列

[英]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兩列都有10 ,則對於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM