【问题标题】:R: replacing special character in multiple columns of a data frameR:替换数据框多列中的特殊字符
【发布时间】:2014-05-04 14:24:15
【问题描述】:

我尝试用“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 语句解决此问题。 如何获得理想的结果?

【问题讨论】:

    标签: regex r dataframe


    【解决方案1】:

    这是一种方法:

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

    解释:

    您的 grepl 不起作用,因为 grepl 只返回一个布尔矩阵 (TRUE/FALSE),该矩阵对应于正则表达式匹配的数据框中的元素。然后分配所做的不仅是替换您要替换的字符,还替换整个字符串。要替换字符串的部分,您需要sub(如果您只想在每个字符串中替换一次)或gsub(如果您希望替换所有匹配项)。要将其应用于每一列,请使用 apply 遍历列。

    【讨论】:

    • 谢谢!解释也很有帮助。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-07-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多