使用 forcats 将一个因素折叠成组时出现错误
Bug when collapsing a factor into groups, with forcats
我有以下数据框:
df = data.frame(a = 1:5) %>% as_tibble()
我想将值 1 和 3 折叠成 'group1',将值 2 和 4 折叠成 'group2',将其他值(例如 5)折叠成 'Other'。我认为 fct_collapse() 会是完美的功能,但它做了一些奇怪的事情...
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'。你知道为什么会这样吗?我想这与我的因子的值是数字但没有找到处理它的方法有关。有什么想法吗?
一些帖子处理类似的问题,但在这种情况下对我没有帮助:
Joining factor levels of two columns
一个简单的 case_when
?
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 中引用的 issue。如果我们删除它,它会按预期工作,但不会给其他组带来任何价值。
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
此错误已在 forcats
的开发版本中修复,并将在下一个版本中提供。
这是一个替代方案,使用 dplyr::recode()
df %>%
mutate(
a = as.character(a),
a_new = recode(a,
'1' = 'group1',
'2' = 'group2',
'3' = 'group1',
'4' = 'group1',
'5' = 'Other'))
我有以下数据框:
df = data.frame(a = 1:5) %>% as_tibble()
我想将值 1 和 3 折叠成 'group1',将值 2 和 4 折叠成 'group2',将其他值(例如 5)折叠成 'Other'。我认为 fct_collapse() 会是完美的功能,但它做了一些奇怪的事情...
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'。你知道为什么会这样吗?我想这与我的因子的值是数字但没有找到处理它的方法有关。有什么想法吗?
一些帖子处理类似的问题,但在这种情况下对我没有帮助:
Joining factor levels of two columns
一个简单的 case_when
?
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 中引用的 issue。如果我们删除它,它会按预期工作,但不会给其他组带来任何价值。
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
此错误已在 forcats
的开发版本中修复,并将在下一个版本中提供。
这是一个替代方案,使用 dplyr::recode()
df %>%
mutate(
a = as.character(a),
a_new = recode(a,
'1' = 'group1',
'2' = 'group2',
'3' = 'group1',
'4' = 'group1',
'5' = 'Other'))