2016-09-14 36 views
1

私は、1.000の回答者に対して33の異なるプロパティのいくつかの有無の行列(例えば、x)を持っています。可能なすべての組み合わせの組み合わせで複数の列を組み合わせる

| 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列のすべての可能な組み合わせが可能であり、データフレームを作成したい1元の行列にx両方の列が持っていた場合1と:データは次のようになります0、それ以外は

例えば、私はこのコードで、元の行列の1列目と2列目のために組み合わせ得るだろう:私は1,000行(回答の数)のデータフレームで終わるべき

ifelse(x[,i] == 1 & x[,i+1] == 1, 1, 0) 

およびこれは行列xの33列の異なる組み合わせの組み合わせの数であるため、528変数です。

Rでこれを達成する効率的な方法はありますか?

+0

注文をい結果として得られる行列の要素のうち、例えば「1 1 0 0」と「0 1 0 1」? – 989

答えて

1

我々は2列の要素が1に等しいかどうかをチェックし、列のサブセット、列名のペアごとの組み合わせを取得するためにcombnを使用することができ、数値に変換し、cbindそれ

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

私はコードを使用すると528列の行列を作成しますが、NAsの行は1行しか作成しません。 私はこの行列を持っていると仮定します(10の観測値のみ): n < - サンプル(c(0,1)、replace = TRUE、size = 330) x < - 行列(n、nrow = 10、ncol = 33) P < - 担当者( "P"、33) Q < - 1:33 名< - paste0(P、Q) COLNAMES(X)< - 名前 を私はあなたのソリューションを適用する必要がありますどのように? – Crimc

+0

@Crimc NAsの1行は明確ではありません。おそらく、列にいくつかのNA値がありますか? – akrun

+0

@Crimc 'df1'から 'x'への変更を除いて同じですが、 'res < - do.call(cbind、combn(colnames(x)、 2、 FUN = function(y)list(+(x [、y [1]]&x [、y [2]])))); dim(res) #[1] 10 528' – akrun

関連する問題