用R替换多个文件中的多个字符串

时间:2015-01-31 15:13:43

标签: r gsub

我在一个文件夹中有700,000个文件,我需要找到并用不同的其他字符串替换多个字符串(所有4个字符代码)。不确定文件中是否存在字符串。我正在尝试使用gsub,但我找不到如何使用正则表达式。有人能告诉我一个好的有效的方法来处理这个任务吗?

这是我到目前为止使用的代码。它仅适用于一个y< -gsub指令,但不能用于我的目的,显然因为只有最后一个gsub指令被用于定义y变量......

chm_files <- list.files(getwd(), pattern=("^[[:digit:]]*.chm$"), full.names=F)

for(chm_file in chm_files) {
  x <- readLines(chm_file)
  y <- gsub("AG02|AG07|AG05|AG18|AG19|AG08|AG09|AG17", "AGRL", x)
  y <- gsub("SB28|SB42|SB43|SB33|SB41|SB34|SB39|SB35", "SWHT", x)
  y <- gsub("WB28|WB42|WB43|WB32|WB09|WB33|WB41|WB26", "BARL", x)
  y <- gsub("WW02|WW25|WW08|WW31|WW05|WW28|WW19|WW42", "WWHT", x)
  cat(y, file=chm_file, sep="\n")
}

2 个答案:

答案 0 :(得分:3)

我确信在各种R包中已经有许多预先构建的功能用于此任务,但无论如何我只是为自己和其他人使用/修改这个。除了上面的任务请求之外,它还打印出一个跟踪日志,记录了跨文件功能所做的所有更改的计数:multi_replace

以下是一些如何运行的示例代码

# local directory with files you want to work with
setwd("C:/Users/DW/Desktop/New folder")
# get a list of files based on a pattern of interest e.g. .html, .txt, .php 
filer = list.files(pattern=".php")
# f - list of original string values you want to change
f <- c("localhost","dbtest","root","oldpassword")
# r - list of values to replace the above values with
# make sure the indexing of f & r
r <- c("newhost", "newdb", "newroot", "newpassword")

# Run the function and watch all your changes take place ;)
tracking_sheet <- multi_replace(filer, f, r)
tracking_sheet

答案 1 :(得分:-1)

setwd("D:/R Training Material Kathmandu/File renaming procedures")
filer = list.files(pattern="2016")
f <- c("DATA,","$")
r <- c("","")
tracking_sheet <- multi_replace(filer, f, r)
tracking_sheet

我使用了上面的脚本,但是代码未能在所有文件中替换$符号