首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >否定fct_collapse的水平

否定fct_collapse的水平
EN

Stack Overflow用户
提问于 2020-06-15 17:35:39
回答 3查看 182关注 0票数 0

我有一个不应该崩溃的级别列表(“艾伯塔”、“不列颠哥伦比亚省”、“安大略”、“魁北克”)。我一直无法否定fct_collapse的级别(代码作为目标的示例)(除了下面的所有内容)。有什么建议吗?

df$`Province group` %<>% fct_collapse(df$Province, `Smaller provinces` = !c("Alberta", "British Columbia", "Ontario", "Quebec"))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-04 19:22:04

包块是解决这个问题的最佳方法(因为问题的逻辑是否定4个大省)。如果有人找到一个比Rui更短的解决方案,我仍然会对未来的因素研究感兴趣。

代码语言:javascript
复制
df%>%
  mutate(`Compared to smaller provinces` = fct_lump(Province, n = 4)) %>%
  count(`Compared to smaller provinces`)

这产生了5个组,其中“其他”是所有其他较小的n个反应省份。

票数 1
EN

Stack Overflow用户

发布于 2020-06-15 17:54:51

我对您在这里使用的一些语法有点困惑,但是这个解决方案应该适用于您!它使用dplyr的管道结构,并以下划线代替变量名中的空格(即variable_name而不是variable name)。

代码语言:javascript
复制
    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.魁北克人你好

票数 1
EN

Stack Overflow用户

发布于 2020-06-15 19:53:49

这里有一个使用levels的解决方案来获得因子的级别。然后,通过否定%in%来对不被折叠的值进行细分。

首先在用户数据集的答案中重新创建@R me matey

代码语言:javascript
复制
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)

现在问题来了。

代码语言:javascript
复制
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 rows
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62393785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档