根据其他列中的查找更改因子水平的顺序

Changing order of factor levels based on lookup in other column

我有一个数据框,其中包含引用同一事物的两列。一个是另一个的数字 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,但我认为没有必要。

在我发现的其他示例中,建议是这样做:

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

但是,这对我来说不起作用,因为有重复项:

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

我不想删除原始数据中的行,因为我不想丢弃数据或更改其顺序,并继续使用数据框。我可以通过其他方式摆脱警告和重复的级别吗?或者我应该完全使用另一种方法?

试试这个:

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