2017-01-20 8 views
1

私は、他のものの中で、同じものを参照する2つの列を含むデータフレームを持っています。 1つは、もう1つの数値IDで、これは要因として解析されます。他の列のルックアップに基づいて因子レベルの順序を変更する

df = data.frame(
    "id" = c(5, 3, 1, 2, 4, 5), 
    "val" = factor(c("a", "b", "c", "d", "e", "a")), 
    "someColumn" = c(13, 38, 91, 83, 19) 
) 

他の追加の列があるため、これらの要因レベルに重複があります。現在では、データフレームに表示される順序に関係なく、要素レベルはアルファベット順に並べられています。

ここに問題があります:私はそのIDに応じて因子のレベルを注文したいと思います。このようにして、特にプロットで作業するのが簡単になります。私はラベルを変更したくない。レベルを実際のIDに変更しても問題ありませんが、必要ではないと思います。

Warning message: 
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : 
    duplicated levels in factors are deprecated 

Iドン:重複があるため、

factor(df$val, levels = df$val[order(df$id)]) 

しかし、これは私の場合には動作しません:私が見つけた他の例では

は、提案がこのような何かをすることでしたデータを破棄したり、その順序を変更したりしたくないので、元のデータの行を削除したいのですが、データフレームの作業を続けます。警告と重複したレベルを別の方法で取り除くことはできますか?あるいは、私は別のアプローチを完全に使うべきですか?

答えて

3

これを試してみてください:

factor(df$val, levels = unique(df$val[order(df$id)])) 
関連する問題