R 基于从某个字符开始的级别的自动重构?

R 基于从某个字符开始的级别的自动重构?,r,refactoring,categorical-data,forcats,R,Refactoring,Categorical Data,Forcats,我正在寻找一种方法,根据级别中的某些模式自动重新编码变量中的因子。我打算将解决方案迭代到更大的数据集 我有一个更大的数据集,它有我下面展示的示例的多个实例。这些级别通常具有以下模式: 主要类别为1、2、3和4。级别11、12、13和14是级别1的子类别。我希望能够简化分组过程。我已经使用fct\u recode成功地执行了重构,但我的目的是将此过程扩展到遵循类似编码模式的其他变量 库(tidyverse) 种族 #> #> 1 1 1 #> 2 11

我正在寻找一种方法,根据级别中的某些模式自动重新编码变量中的因子。我打算将解决方案迭代到更大的数据集

我有一个更大的数据集,它有我下面展示的示例的多个实例。这些级别通常具有以下模式:

主要类别为1、2、3和4。级别11、12、13和14是级别1的子类别。我希望能够简化分组过程。我已经使用
fct\u recode
成功地执行了重构,但我的目的是将此过程扩展到遵循类似编码模式的其他变量

库(tidyverse)
种族
#>        
#> 1 1             1
#> 2 11            3
#> 3 12            3
#> 4 13            3
#> 5 14            1
#> 6 2             1
#> 7 3             1
#> 8 4             1
dat%>%
变异(种族=fct_重新编码(种族,
"1" = "1",
"1" = "11",
"1" = "12",
"1" = "13",
"1" = "14"
)) %>% 
计数(种族)
#>#tibble:4 x 2
#>种族
#>        
#> 1 1            11
#> 2 2             1
#> 3 3             1
#> 4 4             1
由(v0.2.1)于2019-05-31创建


如预期的那样,此方法成功地将11、12、13和14的子类别分组为1。有没有一种方法可以在不手动更改每个子类别的级别的情况下执行此操作?将这个过程扩展到具有相同模式的几个变量的一般方法是什么?谢谢。

一个选项是创建命名向量并计算(
!!!


对于多列,使用
mutate_at
并指定感兴趣的变量

dat %>% 
    mutate_at(vars(colsOfInterst), list(~ fct_recode(., !!! nm1)))

您可以将
fct\u collapse
grep
/regex一起使用,并根据需要调整regex模式:

dat %>%
  mutate(Ethnicity = fct_collapse(Ethnicity, 
                                  "1" = unique(grep("^1", Ethnicity, value = T)))) %>%
  count(Ethnicity)

# A tibble: 4 x 2
  Ethnicity     n
  <fct>     <int>
1 1            11
2 2             1
3 3             1
4 4             1
dat %>% 
    mutate_at(vars(colsOfInterst), list(~ fct_recode(., !!! nm1)))
dat %>%
  mutate(Ethnicity = fct_collapse(Ethnicity, 
                                  "1" = unique(grep("^1", Ethnicity, value = T)))) %>%
  count(Ethnicity)

# A tibble: 4 x 2
  Ethnicity     n
  <fct>     <int>
1 1            11
2 2             1
3 3             1
4 4             1
dat %>%
  mutate(Ethnicity = factor(ifelse(startsWith(as.character(Ethnicity), "1"), 1, Ethnicity))) %>%
  count(Ethnicity)

# A tibble: 4 x 2
  Ethnicity     n
  <fct>     <int>
1 1            11
2 2             1
3 3             1
4 4             1