如何在dplyr的mutate across(everything())中整合多个字符串替换函数
完全可以,有两种常用实现方式:
方法1:在匿名函数内串接替换操作
直接在~后的匿名函数里用管道把多次str_replace操作串起来即可,代码如下:
df1 %>% mutate(across(everything(), ~ str_replace(., "(?i)bar", "open") %>% str_replace("(?i)foo", "done")))
方法2:用str_replace_all的命名向量匹配(更推荐)
如果替换规则较多,叠多层str_replace不够简洁,可以直接用str_replace_all支持的命名向量批量定义替换规则,扩展性更强:
df1 %>% mutate(across(everything(), ~ str_replace_all(., c("(?i)foo" = "done", "(?i)bar" = "open"))))
两种写法运行结果和你现有实现完全一致。注意如果单个单元格内存在多个匹配项,建议统一用str_replace_all替换,避免str_replace只替换第一个匹配项的问题。
内容的提问来源于stack exchange,提问作者Mark Davies
相关产品推荐
相关产品推荐

