Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在另一个表上重新调整RBA中的因子_R_Dplyr_Factors - Fatal编程技术网

如何在另一个表上重新调整RBA中的因子

如何在另一个表上重新调整RBA中的因子,r,dplyr,factors,R,Dplyr,Factors,我正在尝试使用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", "fe

我正在尝试使用
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())
库(dplyr)
图书馆(供猫用)
mydf%dplyr::summary(n=n())#希望按查找$f的顺序排列
mydf%>%
变异(f=fct_relevel(f,levels(mydf$f))%>%#问题线
分组依据(f)%>%dplyr::摘要(n=n())

我知道我可以在
fct_relevel()
中手动定义级别,但我不能每次都硬编码。谢谢。

我的第一个倾向是在进行任何分析之前先修复它:

levels(mydf$f) <- lookup$f
否则,您可以使用有点笨重的
lvls\u reorder

mydf %>% 
  mutate(f = lvls_reorder(f, match(lookup$f, levels(f)))) %>%
  group_by(f) %>%
  dplyr::summarise(n = n())

为什么不干脆做
levels(mydf$f)就行了
mydf%>%变异(f=factor(f,levels=lookup$f))%%>%groupby(f)%%>%dplyr::summary(n=n())
肯定有效。是否有一个与猫相当的
forcats
呢?好吧,很公平,谢谢。也许
lvls\u reorder
,虽然有点复杂-
mydf%>%变异(f=lvls\u reorder(f,match(lookup$f,levels(f)))%%>%groupby(f)%%>%dplyr::summary(n=n())
如果你想给出正式的答案,我很乐意接受。
mydf %>% 
  mutate(f = lvls_reorder(f, match(lookup$f, levels(f)))) %>%
  group_by(f) %>%
  dplyr::summarise(n = n())