【问题标题】:How to replace '+' using gsub() function in R [duplicate]如何在 R 中使用 gsub() 函数替换“+”
【发布时间】:2017-10-13 10:32:28
【问题描述】:

我正在尝试删除数据框的字符串元素之一中存在的“+”字符。但我找不到解决办法。

下面是数据框。

txtdf <- structure(list(ID = 1:9, Var1 = structure(c(1L, 1L, 1L, 1L, 4L, 
            5L, 5L, 2L, 3L), .Label = c("government", "parliament", "parliment", 
            "poli+tician", "politician"), class = "factor")), .Names = c("ID", 
            "Var1"), class = "data.frame", row.names = c(NA, -9L))
#  ID   Var1
#  1    government
#  2    government
#  3    government
#  4    government
#  5    poli+tician
#  6    politician
#  7    politician
#  8    parliament
#  9    parliment

我尝试了两种方法,都没有给出预期的结果:

方式1

txtdf <- gsub("[:punct:]","", txtdf)
# [1] "goverme" "goverme" "goverme" "goverme" "oli+iia" "oliiia"  "oliiia" 
# [8] "arliame" "arlime" 

我不明白这里有什么问题。我希望仅将第 5 个元素的“+”字符替换为无值,但所有元素均按上述方式进行编辑。

方式2

txtdf<-gsub("*//+","",txtdf)
# [1] "government"  "government"  "government"  "government"  "poli+tician"
# [6] "politician"  "politician"  "parliament"  "parliment" 

这里根本没有变化。我想我尝试过的是,我尝试使用双斜杠转义 + 字符。

【问题讨论】:

  • 转义是使用`\`完成的。
  • 或者只是把它放在一个字符类中:"[+]"。由于+(1 个或更多)在字符类中没有特殊含义,因此不需要转义。
  • 或使用fixedargument:gsub("+", "", txtdf$varname, fixed=TRUE)
  • 解决方案很简单,但您的尝试很有趣。您是要删除任何标点符号还是仅删除加号?
  • @RYoda - 已复制,在我以后的问题中肯定会这样做。

标签: r regex dataframe gsub


【解决方案1】:

您需要转义加号,“+”在正则表达式中具有特殊含义(它是一个量词),因此不能被视为标点符号,来自文档:?regex

"+" 前一项将被匹配一次或多次。

要匹配这些特殊字符,您需要对它们进行转义,以便它们的含义可以按字面意思理解,因此它们的特殊含义不会被翻译。在 R 中,您需要两个反斜杠 (\) 才能转义。所以在你的情况下,这将是这样的:

gsub("\\+","",df$job)

通过从数据中删除所有加号,上面的运行将为您提供所需的结果。

所以假设你的 df 是:

df <- data.frame(job = c("government", "poli+tician","politician", "parliament"))

那么你的输出将是:

> gsub("\\+","",df$job)
[1] "government" "politician" "politician"
[4] "parliament"

【讨论】:

  • 反斜杠转义字符完美运行!谢谢!!
【解决方案2】:

只需将其替换为 fixed = TRUE(无需使用正则表达式),但您必须通过指定列名来替换 data.frame 的每个“列”:

txtdf <- data.frame(job = c("government", "poli+tician", "parliament"))
txtdf

给予

          job
1  government
2 poli+tician
3  parliament

现在替换“+”:

txtdf$job <- gsub("+", "", txtdf$job, fixed = TRUE)
txtdf

结果是:

         job
1 government
2 politician
3 parliament

【讨论】:

  • 另一个参数“fixed= TRUE”使你的正则表达式成为一个固定的,这是一个新的学习!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多