R:在数据框的多列中替换特殊字符

use*_*786 2 regex r dataframe

我尝试用“ oe”替换数据框中的德语特殊字符“ö”。该字符出现在多个列中,因此我希望能够不必指定单个列而一次完成所有操作。这是数据框的一个小例子

data <- data.frame(a=c("aö","ab","ac"),b=c("bö","bb","ab"),c=c("öc","öb","acö"))
Run Code Online (Sandbox Code Playgroud)

我试过了 :

data[data=="ö"]<-"oe"
Run Code Online (Sandbox Code Playgroud)

但这没有用,因为我需要在这里使用正则表达式。但是当我尝试:

data[grepl("ö",data)]<-"oe"
Run Code Online (Sandbox Code Playgroud)

我没有得到我想要的。最后的数据框应如下所示:

> data
   a  b   c
1 aoe boe  oec
2 ab bb  oeb
3 ac ab acoe
> 
Run Code Online (Sandbox Code Playgroud)

该文件是由read.csv导入的csv导入。但是,似乎没有选择更改以使用import语句解决此问题。我如何获得理想的结果?

Sve*_*ein 6

如果要返回数据框,可以使用:

data.frame(lapply(data, gsub, pattern = "ö", replacement = "oe"))
Run Code Online (Sandbox Code Playgroud)


Roy*_*lTS 5

这是一种实现方法:

data <- apply(data,2,function(x) gsub("ö",'oe',x))
Run Code Online (Sandbox Code Playgroud)

说明:

grepl无法使用,因为grepl仅返回一个与矩阵中正则表达式匹配的元素相对应的布尔矩阵(TRUE/ FALSE)。然后,赋值操作不仅替换您要替换的字符,还替换整个字符串。要替换字符串的一部分,您需要sub(如果要在每个字符串中仅替换一次)或gsub(如果要替换所有出现的内容)。要将其应用于每个列,请使用循环遍历这些列apply