根据另一列的数值设置因子水平

问题描述:

我一直在想如何根据同一个data.frame中的另一列的值来排列因子。我一直用这个问题作为我努力的基础:根据另一列的数值设置因子水平

R - Order a factor based on value in one or more other columns

在我的例子,我喜欢的ftororder_ID设置的级别。 order_ID只是订单的排名。以下是我迄今为止:

df <- data.frame(order_ID=c(5,3,1,4,2), 
      ftor=LETTERS[1:5]) 


df$ftor <- factor(df$ftor, levels=df[order(df$order_ID),], ordered=TRUE) 

这是我所得到的,当我尝试上述尝试后水平:

> levels(df$ftor) 
[1] "c(1, 2, 3, 4, 5)" "c(3, 5, 2, 4, 1)" 

基于对order_ID这里的价值是什么,我期待:

> levels(df$ftor) 
[1] "C" "B" "E" "D" "A" 

总之,任何人都可以推荐一种方法,我可以使用一列的水平来设置同一个data.frame中的另一个因子的水平?

+1

它应该是'水平= DF $ ftor [顺序(DF $ ORDER_ID)]' –

+0

完美! @RichScriven是你想把这个作为答案,我会接受这个。我看到了这个问题。谢谢您的帮助。 – boshek

这里的答案,实际上由@RichScriven提供的是我没有设置我想要的列的顺序(df$ftor),而是整个data.frame(df)。另外,索引是不可靠的。所以,最后我更换了这一点:

df$ftor <- factor(df$ftor, levels=df[order(df$order_ID),], ordered=TRUE) 

与此:

df$ftor <- factor(df$ftor, levels=df$ftor[order(df$order_ID)], ordered=TRUE)