我有一个数据框,其中包含两个引用相同内容的列。一个是另一个的数字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
我不想删除原始数据中的行,因为我不想丢弃数据或更改其顺序,并继续使用数据帧。我可以通过其他方式摆脱警告和重复级别吗?或者我应该完全使用另一种方法吗?
答案 0 :(得分:3)
试试这个:
factor(df$val, levels = unique(df$val[order(df$id)]))