10

0 から 39 までの因数があります。現在の順序は次のとおりです。

> levels(items$label)
 [1] "0"  "1"  "10" "11" "12" "13" "14" "15" "16" "17" "18" "19"
[13] "2"  "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "3" 
[25] "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "4"  "5" 
[37] "6"  "7"  "8"  "9"

表示目的で、番号順に並べ替えるにはどうすればよいですか? データフレームの意味を変えたくありません。

UPDATEitems : 元のデータ フレームをソートされた係数で更新するにはどうすればよいlabelsですか? これにより、データ フレームが実質的に変更されることはありません。後続の操作で因子が正しい順序で出てくるようにしたいだけです。

4

3 に答える 3

7
sorted_labels <- paste(sort(as.integer(levels(items$label))))

与えます:

 [1] "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11"
[13] "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23"
[25] "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35"
[37] "36" "37" "38" "39"

または(https://stackoverflow.com/a/15665655/109618で述べたように):

sorted_labels <- order(levels(items$label)) - 1
# order by itself is a 1-based vector
# using `- 1` gives a 0-based vector

更新された質問ごとに、これはデータ フレームを更新します。

items$label <- factor(items$label, levels = sorted_labels)
于 2013-03-27T17:32:37.297 に答える
2

すべての整数が存在する場合は、次のように単純に使用できますorder

  order(levels(items$label)) - 1   # where the minus 1 is for starting from 0

すべての整数が存在しない場合は、as.numeric を使用する必要があります。

于 2013-03-27T17:38:45.140 に答える