【发布时间】:2021-12-28 17:57:20
【问题描述】:
我正在尝试使用 forcats 中的 fct_relabel() 重新标记我的因子以包括因子名称和与其所在的行数,但是当我使用该函数时,它完全改变了我设置的级别列出现的顺序。我怎样才能覆盖这个?我原来的名字是一致的(例如,动物的名字),但数量会有所不同。因此,我不能依靠新标签名称手动重新调整级别,除非我能以某种方式进行部分匹配(例如,标签名称不完全匹配但包含 cat)。
任何帮助将不胜感激!
library(dplyr)
library(forcats)
test <- tibble(animal = factor(c("cat", "dog", "pig"), levels = c("dog", "pig", "cat")),
n = c(100, 10, 5),
animal_num = fct_relabel(animal, ~paste(animal, "N =", n)))
levels(test$animal) #original, correct levels
levels(test$animal_num) #levels should be "dog N = 10", "pig N = 5", "cat N = 100"
我也不愿意使用 fct_relabel,但会优先考虑 tidyverse 解决方案。谢谢!
更新具有重复值的示例
test <- tibble(animal = factor(c("cat", "dog", "pig", "cat", "dog"),
levels = c("dog", "pig", "cat")),
n = c(100, 10, 5, 100, 10),
animal_num = fct_relabel(animal, ~ paste(animal[order(animal)],
"N=", n[order(animal)])))
【问题讨论】: