【问题标题】:Remove numbers from string in R从R中的字符串中删除数字
【发布时间】:2015-11-17 11:03:17
【问题描述】:

我正在尝试使用函数 gsub 从字符串中删除除 67 之外的所有数字。

例如:

txt <- "A function 147832 for 67cleaning 67 data 6 7"

愿望输出:

txt <- "A function for 67cleaning 67 data"

我试过txt = gsub("[[:digit:]]", "", txt),但它会删除所有数字。

【问题讨论】:

  • 除 6 和 7 之外的所有数字,还是除“67”之外的所有数字?字符串是什么样子的? “9876543210”的输出应该是什么? “1 2 67 3”与“12673”呢?
  • @nico 是 67。比如x="I like apple 67 12 123",我希望它变成x="I like apple 67"。关于1 2 3 67 3,预期结果为67;关于123673,预期结果是“无”。

标签: r gsub


【解决方案1】:

它不是超级优雅,但你可以分三步完成:

 tmp <- gsub("67", "XX", "A function 147832 for 67cleaning 67 data 6 7")
 tmp <- gsub("\\d+", "", tmp)
 tmp <- gsub("XX", "67", tmp)
 tmp
 #"A function  for 67cleaning 67 data  "

首先将67 的所有实例替换为标记(例如XX),然后删除所有其他剩余数字,最后将67 重新插入。

【讨论】:

    【解决方案2】:

    你可以这样做

    x = unlist(strsplit(txt, split = '\\s+')) # split your string
    paste0(x[Reduce(`|`, lapply(c('[A-Za-z]', '67'), grepl, x))], collapse = ' ') # use the list of regular expression to match the required pattern and put them all together
    
    #[1] "A function for 67cleaning 67 data"
    

    【讨论】:

    • 感谢您的回复。但是我在R里试过,结果是[1] "c(\"A\", \"function\", \"147832\", \"for\", \"67cleaning\", \"67\", \"data\", \"6\", \"7\")",不知道为什么。
    • @velvetrock 我已经编辑了答案,现在它应该可以工作了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2013-02-16
    • 1970-01-01
    • 2020-12-14
    • 2022-01-22
    • 2022-08-02
    相关资源
    最近更新 更多