根据另一列的数值设置因子的级别

时间:2016-11-23 18:20:39

标签: r

我一直试图弄清楚如何根据同一data.frame中的另一列的值来排序因子。我一直在用这个问题作为我努力的基础:

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

在我的示例中,我喜欢由ftor设置的order_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 个答案:

答案 0 :(得分:3)

@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)