-1

SO スレッド: Reorder levels of a factor without changing order of valuesを読みましたが、これは正常に機能します。ただし、特定のユースケースでは、出力に困惑しています。

> df$mode
[1]  write               read                write_with_journal  write               read                write_with_journal
[7]  write               read                write_with_journal
Levels:  read  write  write_with_journal

ここで、因子の順序を " read write write_with_journal"から " に変更してい"write read write_with_journalます。

> factor(df$mode, levels = c('write', 'read', 'write_with_journal'))
[1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
Levels: write read write_with_journal

以前のカテゴリ値「書き込み」、「読み取り」などはすべて NA に置き換えられていることに注意してください。なぜこれが起こっているのかわかりません。次のように(ファイルから読み取る代わりに)データフレームを手動で作成すると:

> p = factor(rep(c("write", "read", "write_with_journal"),3))
> factor(p, levels = c('write', 'read', 'write_with_journal'))

その後、すべてが順調です。なんで?

4

1 に答える 1

1

おそらく、すべての因子レベルにトレーニング スペースがあります。これを行う:

df$mode <- factor( gsub(" ", "", df$mode), 
                   levels = c('write', 'read', 'write_with_journal'))

別の方法として (ただし、問題を修正するわけではありません)、次のようにすることもできます。

df$mode <- factor( df$mode, 
                   levels = levels(df$mode)[c(2,1,3)] )

これがもっともらしいことを示すためだけに (ただし、他の非印刷文字が存在するため、決して問題ではありません):

> p = factor(rep(c("write ", "read ", "write_with_journal "),3))
>  factor(p, levels = c('write', 'read', 'write_with_journal'))
[1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
Levels: write read write_with_journal
于 2013-08-22T20:35:27.797 に答える