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

时间:2014-03-26 09:32:00

标签: regex r dataframe

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

data <- data.frame(a=c("aö","ab","ac"),b=c("bö","bb","ab"),c=c("öc","öb","acö"))

我试过了:

data[data=="ö"]<-"oe"

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

data[grepl("ö",data)]<-"oe"

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

> data
   a  b   c
1 aoe boe  oec
2 ab bb  oeb
3 ac ab acoe
> 

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

2 个答案:

答案 0 :(得分:4)

以下是一种方法:

data <- apply(data,2,function(x) gsub("ö",'oe',x))

说明:

您的grepl无法正常工作,因为grepl只返回与数据框中元素相对应的布尔矩阵(TRUE / FALSE)正则表达式匹配。然后,赋值的作用不仅是替换您想要替换的字符而且替换整个字符串。要替换字符串的 part ,您需要sub(如果您只想在每个字符串中替换一次)或gsub(如果您希望所有匹配项都替换)。要将其应用于使用apply循环列的每个列。

答案 1 :(得分:4)

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

data.frame(lapply(data, gsub, pattern = "ö", replacement = "oe"))