【问题标题】:How do I remove a specific sign like a comma partially from a data set如何从数据集中部分删除特定符号(如逗号)
【发布时间】:2014-10-18 20:26:05
【问题描述】:

我有一个这样的数据集:

Quest_main=c("quest2,","quest5,","quest4,","quest12,","quest4,","quest5,quest7")

我想从例如“quest2”中删除逗号,以便它是“quest2”,而不是从“quest5,quest7”中删除。我想我必须使用 substr 或 ifelse,但我不确定。当我调用 Quest_main 时,最终结果是这样的:

 "quest2"   "quest5"   "quest4"   "quest12"   "quest4"   "quest5,quest7"

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    你只需要

    gsub(",$","",Quest_main)
    

    $ 表示字符串的结尾:完整说明请参见(冗长而复杂的)?regexp,或 more general introduction to regular expressions,或在 Stack Overflow 上搜索标签 [r] [regex]

    如果您坚持使用substr()ifelse(),您可以:

    nc <- nchar(Quest_main)
    lastchar <- substr(Quest_main,nc,nc)
    ifelse(lastchar==",",substr(Quest_main,1,nc-1),
                         Quest_main)
    

    【讨论】:

    • 这是一种超快速的方法。但是 ifelse 和 substr 可以吗?
    • Trik23:请参阅我的答案。但是 Ben Bolker 的回答要好得多:)
    • @Trik23 - 使用substr,您首先需要找到, 出现的位置,这比gsub 效率低得多
    • @BenBolker 作为 R 的初学者,我想看看不同的命令在 R 中的作用。只是个人的好奇心和保持学习曲线。
    【解决方案2】:

    使用substringifelse

    ifelse(substring(Quest_main,nchar(Quest_main))==',',substring(Quest_main,1,nchar(Quest_main)-1),Quest_main)
    

    【讨论】:

      【解决方案3】:

      这是使用negative lookahead的另一种方法(仅用于一般知识)

      gsub("(,)(?!\\w)", "", Quest_main, perl = TRUE)
      ## [1] "quest2"        "quest5"        "quest4"        "quest12"       "quest4"        "quest5,quest7"
      

      这种方法更通用,以防您不仅要从单词末尾删除逗号,还要指定其他条件


      更通用的解决方案是使用stringis stri_trim_right,这将在 Bens 或 Jealie 解决方案失败的情况下起作用,例如,当您想要删除句子末尾的许多逗号时,例如:

      Quest_main <- c("quest2,,,," ,"quest5,quest7,,,,")
      Quest_main
      #[1] "quest2,,,,"        "quest5,quest7,,,,"
      library(stringi)
      stri_trim_right(Quest_main, pattern = "[^,]")
      #[1] "quest2"        "quest5,quest7"
      

      【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2019-02-12
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多