我需要为“在 R 中查找和替换”编写一个通用函数。如何编写一个接受以下输入的函数
- CSV 文件(或数据框)
- 要查找的字符串,例如“name@email.com”
- 将找到的字符串替换为的字符串,例如“medium”
并重写 CSV 文件/数据框,以便将所有找到的字符串替换为替换字符串?
我需要为“在 R 中查找和替换”编写一个通用函数。如何编写一个接受以下输入的函数
并重写 CSV 文件/数据框,以便将所有找到的字符串替换为替换字符串?
这是完成这项工作的快速功能:
library(stringr)
replace_all <- function(df, pattern, replacement) {
char <- vapply(df, function(x) is.factor(x) || is.character(x), logical(1))
df[char] <- lapply(df[char], str_replace_all, pattern, replacement)
df
}
replace_all(iris, "setosa", "barbosa")
基本上,它识别数据框中所有作为字符或因素的变量,然后应用于str_replace_all
每一列。模式应该是一个正则表达式,但是如果你想匹配一个固定的字符串,你可以这样做(例如)
replace_all(iris, fixed("setosa"), "barbosa")
以下解决方案适用于“精确”匹配:
dat <- data.frame(a=letters[1:10], y=letters[10:1])
apply(dat, 2, function(v, foo, bar) {v[v==foo]=bar;return(v)}, foo='a', bar='baz')
但是,这不会替换包含 1 的字符串。它还会有许多边缘情况,这些情况不会按您预期的方式工作。
正如我在评论中提到的,命令行工具sed
非常适合这种操作。