首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将某一因素分解成组时,与forcats一起。

当将某一因素分解成组时,与forcats一起。
EN

Stack Overflow用户
提问于 2020-01-29 11:25:47
回答 2查看 181关注 0票数 0

我有以下数据框架:

代码语言:javascript
复制
df = data.frame(a = 1:5) %>% as_tibble()

我希望将值1和3折叠为“group2 1”,将2和4折叠为“group2”,将其他值(例如,5)折叠为“other”。我认为fct_collapse()是一个完美的函数,但是它会做一些奇怪的事情.

代码语言:javascript
复制
df %>% 
  mutate(
    a = as.character(a),
    a_collapse = fct_collapse(a, 
             group1=c('1', '3'),
             group2 = c('2', '4'),
             group_other = TRUE))

然而,值3得到的是'group2‘而不是’group1 1‘。你知道为什么会发生这种事吗?我想这与我的因子的数值是数字有关,但没有找到解决方法。有什么想法吗?

有些帖子涉及类似的问题,但在这种情况下对我没有帮助:

用数值替换因子

两列的连接因子级别

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-29 11:28:08

简单的case_when

代码语言:javascript
复制
library(dplyr)
df %>%
  mutate(a_collapse = factor(case_when(a %in% c(1, 3)~"group1", 
                                       a %in% c(2, 4) ~"group2", 
                                       TRUE ~ 'Other')))

# A tibble: 5 x 2
#     a a_collapse
#  <int> <fct>     
#1     1 group1    
#2     2 group2    
#3     3 group1    
#4     4 group2    
#5     5 Other     

fct_collapse而言,问题似乎来自于将group_other包括在内,就像在Github上的问题中引用的那样。如果我们删除它,它可以正常工作,但不会给其他组带来任何价值。

代码语言:javascript
复制
df %>% 
  mutate(
    a = as.character(a),
    a_collapse = forcats::fct_collapse(a, 
                              group1=c('1', '3'),
                              group2 = c('2', '4')))

# A tibble: 5 x 2
#   a     a_collapse
#  <chr> <fct>     
#1 1     group1    
#2 2     group2    
#3 3     group1    
#4 4     group2    
#5 5     5        

此bug已在forcats的开发版本中修复,并将在下一个版本中使用。

票数 2
EN

Stack Overflow用户

发布于 2020-01-29 12:27:33

这里有一个替代方法,使用dplyr::recode()

代码语言:javascript
复制
df %>% 
  mutate(
    a = as.character(a),
    a_new = recode(a,
                   '1' = 'group1', 
                   '2' = 'group2', 
                   '3' = 'group1', 
                   '4' = 'group1', 
                   '5' = 'Other'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59966044

复制
相关文章

相似问题

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