根据其他列中的查找更改因子水平的顺序
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)]))
我有一个数据框,其中包含引用同一事物的两列。一个是另一个的数字 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)]))