0

我需要为“在 R 中查找和替换”编写一个通用函数。如何编写一个接受以下输入的函数

  • CSV 文件(或数据框)
  • 要查找的字符串,例如“name@email.com”
  • 将找到的字符串替换为的字符串,例如“medium”

并重写 CSV 文件/数据框,以便将所有找到的字符串替换为替换字符串?

4

2 回答 2

8

这是完成这项工作的快速功能:

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")
于 2012-10-10T22:57:57.033 回答
1

以下解决方案适用于“精确”匹配:

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非常适合这种操作。

于 2012-10-10T22:43:25.353 回答