【发布时间】:2017-03-08 11:43:13
【问题描述】:
我正在尝试使用 forcats::fct_relevel() 重新调整 mydf 中的因子以匹配查找中因子的顺序:
library(dplyr)
library(forcats)
mydf <- data.frame(id=1:10, f=as.factor(c("feb", "mar","mar","mar","jan","jan", "apr", "apr","mar", "jan")))
lookup <- data.frame(f=as.factor(c("jan", "feb", "mar", "apr"))) #the order i want
levels(mydf$f) #defaults to alphabetical
mydf %>% group_by(f) %>% dplyr::summarise(n = n()) #want this in the order of lookup$f
mydf %>%
mutate(f = fct_relevel(f, levels(mydf$f))) %>% #the problem line
group_by(f) %>% dplyr::summarise(n = n())
我知道我可以在fct_relevel() 中手动定义级别,但我不能每次都对其进行硬编码。谢谢。
【问题讨论】:
-
为什么不先
levels(mydf$f) <- lookup$f? -
好的,所以
mydf %>% mutate(f = factor(f, levels=lookup$f)) %>% group_by(f) %>% dplyr::summarise(n = n())肯定有效。是否有forcats等效项? -
好的,谢谢。
-
也许是
lvls_reorder,虽然有点复杂-mydf %>% mutate(f = lvls_reorder(f, match(lookup$f, levels(f)))) %>% group_by(f) %>% dplyr::summarise(n = n()) -
如果您想发布正式答案,我很乐意接受。