我有一个不应该崩溃的级别列表(“艾伯塔”、“不列颠哥伦比亚省”、“安大略”、“魁北克”)。我一直无法否定fct_collapse的级别(代码作为目标的示例)(除了下面的所有内容)。有什么建议吗?
df$`Province group` %<>% fct_collapse(df$Province, `Smaller provinces` = !c("Alberta", "British Columbia", "Ontario", "Quebec"))
发布于 2020-07-04 19:22:04
包块是解决这个问题的最佳方法(因为问题的逻辑是否定4个大省)。如果有人找到一个比Rui更短的解决方案,我仍然会对未来的因素研究感兴趣。
df%>%
mutate(`Compared to smaller provinces` = fct_lump(Province, n = 4)) %>%
count(`Compared to smaller provinces`)这产生了5个组,其中“其他”是所有其他较小的n个反应省份。
发布于 2020-06-15 17:54:51
我对您在这里使用的一些语法有点困惑,但是这个解决方案应该适用于您!它使用dplyr的管道结构,并以下划线代替变量名中的空格(即variable_name而不是variable name)。
library(dplyr)
library(forcats)
#What I imagine your df$Province variable looks like
df <- tibble(Province = rep(c("Ontario", "Alberta", "Quebec", "British Columbia", "PEI", "Manitoba", "Nova Scotia"), 10))
#Define your big provinces in this vector
big_provinces <- c("Ontario", "Alberta", "Quebec", "British Columbia")
#Modify the dataset (i.e. do the fct_collapse)
df %>%
mutate(Province_group = fct_collapse(
Province, #For the variable "Province"
"Smaller provinces" = unique(Province[!(Province %in% big_provinces)]) #"Smaller provinces" is any province not in the vector big_province.
) #end of fct_collapse
) #mutate如果“省”是一个因子变量,则需要首先将其转换为字符变量。
P.S.魁北克人你好
发布于 2020-06-15 19:53:49
这里有一个使用levels的解决方案来获得因子的级别。然后,通过否定%in%来对不被折叠的值进行细分。
首先在用户数据集的答案中重新创建@R me matey。
library(magrittr)
library(dplyr)
library(forcats)
df <- tibble(Province = rep(c("Ontario", "Alberta", "Quebec", "British Columbia", "PEI", "Manitoba", "Nova Scotia"), 10))
df$Province <- factor(df$Province)现在问题来了。
big_provinces <- c("Alberta", "British Columbia", "Ontario", "Quebec")
df %<>%
mutate(Province = fct_collapse(Province, `Smaller provinces` = levels(Province)[!levels(Province) %in% big_provinces]))
df
## A tibble: 70 x 1
# Province
# <fct>
# 1 Ontario
# 2 Alberta
# 3 Quebec
# 4 British Columbia
# 5 Smaller provinces
# 6 Smaller provinces
# 7 Smaller provinces
# 8 Ontario
# 9 Alberta
#10 Quebec
## ... with 60 more rowshttps://stackoverflow.com/questions/62393785
复制相似问题