我尝试用“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语句进行更改以解决此问题。 我如何获得理想的结果?
答案 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"))