使用gsubfn在数据框中按替换列表替换元素失败求助
解决数据框元素批量替换问题
我来帮你搞定这个替换问题!你的代码没生效是因为gsubfn里用.只会匹配单个字符,而你需要匹配整个字符串来完成替换。下面给你几个简洁的实现方式,总有一款适合你:
方案1:修正gsubfn的用法
只需要把匹配模式改成匹配整个字符串(^.*$),就能让原来的思路正常工作:
library(gsubfn) testing123tmp <- data.frame(x=c("it's", "not", "working")) tmp <- list("it's" = "hey", "working"="dead") # 替换整个字符串而非单个字符 testing123tmp$x <- gsubfn("^.*$", tmp, testing123tmp$x) testing123tmp
执行后就能得到你想要的输出:
x 1 hey 2 not 3 dead
方案2:Base R原生方法(无需额外包)
用match配合ifelse,不需要加载任何第三方包,简洁高效:
testing123tmp <- data.frame(x=c("it's", "not", "working")) # 把替换规则改成命名向量更方便 tmp_vec <- c("it's" = "hey", "working"="dead") testing123tmp$x <- ifelse( is.na(match(testing123tmp$x, names(tmp_vec))), testing123tmp$x, # 没有匹配到的保持原样 tmp_vec[match(testing123tmp$x, names(tmp_vec))] # 匹配到的替换 ) testing123tmp
方案3:用dplyr的recode(最直观)
如果你平时用tidyverse工具链,dplyr::recode的语法最贴近自然语言,可读性拉满:
library(dplyr) testing123tmp <- data.frame(x=c("it's", "not", "working")) testing123tmp <- testing123tmp %>% mutate(x = recode(x, "it's" = "hey", "working" = "dead")) testing123tmp
内容的提问来源于stack exchange,提问作者beavis11111
相关产品推荐
相关产品推荐

