我需要編寫一個通用函數用於「在R中查找和替換」。如何可以寫一個函數,採用以下輸入在R中編寫「查找和替換」的通用函數
- CSV文件(或數據幀)
- 的字符串找到,例如,「[email protected]」
- 的字符串的替換找到字符串,例如「medium」
並重寫了CSV文件/數據框,以便所有找到的字符串都被替換字符串替換?
我需要編寫一個通用函數用於「在R中查找和替換」。如何可以寫一個函數,採用以下輸入在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
非常適合這種操作。
你嘗試過什麼?這是確切的字符串還是部分匹配?例如我是否將「電子郵件地址爲[email protected]」替換爲「電子郵件地址中等」?你必須在R中執行此操作嗎?命令行工具'sed'是我能想到的最好的東西,可以用來做你正在問的東西。 – Justin