r语言 - 简化同一变量的多个if else内部mutate



我正试图清理expr列中的一些数据。这只是一个子集,但我已经实现了更多的规则。但是,下面所示的方法非常慢。

有什么方法可以简化它并使其更有效吗?

感谢
df %>%
mutate(expr = ifelse(entity == "Frequency",gsub( "twice daily", "2", expr), expr)) %>%
mutate(expr = ifelse(entity == "Frequency",gsub( "twice a day", "2", expr), expr)) %>%
mutate(expr = ifelse(entity == "Frequency",gsub( "once daily", "1", expr), expr)) %>%
mutate(expr = ifelse(entity == "Frequency",gsub( "daily", "1", expr), expr))

这是case_whendplyr绝对发光的地方,因为它实际上允许您链接多个if-语句。

语法为case_when(logical ~ action)。如果逻辑语句为真,则执行该操作。

df %>% 
mutate(expr = case_when(
entity == "Frequency" ~ gsub("twice (daily|a day)", "2", expr),
entity == "Frequency" ~ gsub( "once daily", "1", expr),
entity == "Frequency" ~ gsub( "daily", "1", expr)
))