2016-07-12 11 views
3

私は二分値からなるデータセットを持っています。それは非常に大規模なデータセットですが、ここでの例です:列を合計で並べ替え、同じ列を並べ替え

var1 <- c(1, 0, 1, 1, 0) 
var2 <- c(1, 1, 1, 1, 1) 
var3 <- c(0, 0, 1, 1, 0) 
var4 <- c(0, 0, 1, 1, 0) 
var5 <- c(1, 1, 0, 0, 0) 
dat <- data.frame(var1,var2,var3,var4,var5) 
dat <- as.matrix(dat) 

私は1つに2つのコマンドを組み込むしようとしています。まず、同じ列が一括して列をクラスター化する必要があります。次に、列の合計で列を並べ替える必要があります。私はどちらか一方を行うことができますが、両方を行うことはできません。

ので、出力は次のようになります。

var2 var1 var5 var3 var4 
    1 1 1 0 0 
    1 0 1 0 0 
    1 1 0 1 1 
    1 1 0 1 1 
    1 0 0 0 0 

最高の列の合計は、左側に位置する必要はありません。

私は、このコマンドを使用してみました:

csums <- dat[,order(colSums(dat,na.rm=TRUE))] 

しかし、列は類似性によってクラスタ化しないでください。おそらく類似性に基づいてクラスター化する方法があります。列の合計を条件としています。

答えて

4

これはちょっと変わった解決策です。列の畳まれた文字列表現によって二次的に並べ替えることができます。列表現は、colSums()の列セットのタイブレーカーとして機能します。これにより、同じ列が辞書順に並べ替えられるので、同じ列が一緒にクラスタ化されます。

dat[,order(decreasing=T,colSums(dat,na.rm=T),apply(dat,2L,paste,collapse=''))]; 
##  var2 var1 var5 var3 var4 
## [1,] 1 1 1 0 0 
## [2,] 1 0 1 0 0 
## [3,] 1 1 0 1 1 
## [4,] 1 1 0 1 1 
## [5,] 1 0 0 0 0 
+0

おかげで非常に多くの合計によって

  • ソートと異なる場合、ソート辞書順であれば、同じ合計!これは完全に機能しました。適用設定で「2」だけでなく、なぜ「2L」を持っていますか?また、貼り付けと折りたたみはどのような機能を果たしますか? – jj987246

  • +0

    崩壊が二次ソート手順として機能しているようです。折りたたみ= ''とはどういう意味ですか? – jj987246

    +0

    @ jj987246 ['apply()'ドキュメント](https://stat.ethz.ch/R-manual/R-devel/library/base/html/apply.html)を見てください。 variadicの '...'引数は 'FUN()'に渡されます。私の解決方法では、 'collapse = ''引数は' paste() 'に渡されます。 ['paste()'のドキュメント(https://stat.ethz.ch/R-manual/R-devel/library/base/html/paste.html)を見ると、 ''崩壊指定されていれば、 'collapse'文字列をセパレータとして使用して、最終的なベクトルのすべての要素を単一の要素に折りたたむために使用されます。 – bgoldst

    0

    これは、クラスタリング(教師なし構造の発見)問題はなく、単に非自明ソートロジックで並べ替え問題ではありません。合計によって

    あなたのツールが提供する内容に応じて、することができます

    1. ソート辞書的に、安定したソート
    関連する問題