在mutate中使用case_when时是否需要数据帧名称?

Log*_*gan 5 r dplyr

full <- full %>% 
  mutate(Title = case_when(
    Title %in% c('Mlle', 'Ms') ~ 'Miss',
    Title == 'Mme' ~ 'Mrs',
    Title %in% rare_title ~ 'Rare Title',
    TRUE ~ Title
  ))
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了错误: Error in eval(substitute(expr), envir, enclos) : object 'Title' not found

但是,下面的代码工作.case_when中是否需要数据框名称(使代码更加详细).

full <- full %>% 
  mutate(Title = case_when(
    full$Title %in% c('Mlle', 'Ms') ~ 'Miss',
    full$Title == 'Mme' ~ 'Mrs',
    full$Title %in% rare_title ~ 'Rare Title',
    TRUE ~ full$Title
  ))
Run Code Online (Sandbox Code Playgroud)

akr*_*run 3

我们可以使用.$而不是调用full$

full <- full %>% 
          mutate(Title = case_when(
                 .$Title %in% c('Mlle', 'Ms') ~ 'Miss',
                  .$Title == 'Mme' ~ 'Mrs',
                   .$Title %in% rare_title ~ 'Rare Title',
                    TRUE ~ .$Title
             ))
Run Code Online (Sandbox Code Playgroud)

数据

set.seed(24)
full <- data.frame(Title = sample(c('Mlle', 'Ms', 'Mme', 'Colonel', 'Jr'), 20,
                 replace=TRUE), stringsAsFactors= FALSE)
rare_title <- 'Colonel'
Run Code Online (Sandbox Code Playgroud)