2017-04-05 15 views
2

私はこのようになり、データフレーム持っている:私がする必要がどのようなデータフレームの列を注文次に貼り付け行名

> testdata 
      topic1 topic2 topic3 topic4 topic5 
church  0.011 0.003 0.001 0.001 0.012 
of   0.094 0.085 0.098 0.063 0.051 
the  0.143 0.115 0.159 0.083 0.097 
appearance 0.000 0.000 0.002 0.005 0.040 
restrain 0.000 0.000 0.000 0.000 0.000 

は5列、各列でも5行で、新たなデータフレームを作成することですこのデータフレームの整列された行の名前です。言い換えれば、データフレームを降順で各列で順序付けし、その列の上に行の名前を印刷する必要があります。この例では、私が必要とするデータフレームは、ここで

> testdata_word_ranks 
       topic1  topic2  topic3  topic4  topic5 
church    the   the   the   the   the 
of     of   of   of   of   of 
the    church  church appearance appearance appearance 
appearance appearance appearance  church  church  church 
restrain  restrain  restrain  restrain  restrain  restrain 

になり、新たなデータフレームに上記testdata_word_ranksの列を割り当てることで、私の失敗した試みです:

for(i in 1:nrow(testdata)){ 
    minidf = data.frame(rownames(testdata), testdata[,i]) 
    assign(paste0('testdata_word_ranks$topic', i), 
     as.vector(minidf[order(minidf[,2], decreasing = TRUE),]$rownames.testdata)) 
} 

ちょうどあなたの情報のため、このデータ特定のコーパス上のトピックモデルから来ています。

答えて

3

あなたができ、各列の順序によってインデックス列名:

matrix(row.names(test.data)[apply(-test.data, 2, order)], nrow(test.data)) 
#  [,1]   [,2]   [,3]   [,4]   [,5]   
# [1,] "the"  "the"  "the"  "the"  "the"  
# [2,] "of"   "of"   "of"   "of"   "of"   
# [3,] "church"  "church"  "appearance" "appearance" "appearance" 
# [4,] "appearance" "appearance" "church"  "church"  "church"  
# [5,] "restrain" "restrain" "restrain" "restrain" "restrain" 
+1

代替試み - '置き換える(TESTDATA ,, rownames(テストデータ)sapply(-testdata、オーダー)])' – thelatemail

関連する問題