我正试图清理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_when
从dplyr
绝对发光的地方,因为它实际上允许您链接多个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)
))