【问题标题】:Use gsub remove all string before first white space in R使用 gsub 删除 R 中第一个空格之前的所有字符串
【发布时间】:2015-12-22 09:35:44
【问题描述】:

我有一个这样的数据框:

name         weight
r apple         0.5
y pear          0.4
y cherry        0.1
g watermelon    5.0
pp grape        0.5
y apple pear    0.4
...  ...

我想删除名称列中第一个空格之前的所有字符。有人可以帮我一个忙吗?谢谢!

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    试试这个:

    sub(".*? ", "", D$name)
    

    编辑:

    该模式在第一个空格之前查找任何字符零次或多次 (.*),然后在第一个空格之后捕获一个或多个字符 ((.+))。 .* 之后的 ? 使它“懒惰”而不是“贪婪”,这使它在找到的第一个空间处停止。因此,.*? 匹配第一个空格之前的所有内容,该空格匹配找到的第一个空格。

    【讨论】:

    • 这很好用,但是 sub() 的模式命令是什么意思?
    【解决方案2】:

    如果D 是您的数据框,请尝试

    sub(".+? ", "", D$name)
    

    【讨论】:

    • 对不起,我试过了,但是对于“y apple pear”,它只会给我梨而不是苹果梨。我想删除第一个空格而不是最后一个空格之前的所有内容。不过,谢谢!
    • 制作图案:“^[^]+”
    • 尝试将模式更改为".+? "
    • 抱歉,我忘了正则表达式有多贪心。谢谢 BondedDust 和 CactusWoman 让我诚实。
    【解决方案3】:

    假设您的数据框名为“df”

    library(reshape2)    
    df$name = colsplit(df$name," ", names = c("chuck","name"))[,2]
    

    【讨论】:

      【解决方案4】:

      以下解决方案不使用 gsub,但可以使用管道运算符 %>% 将其应用于数据帧。

      library(tidyverse)
      
      # The data
      df <- structure(list(name = c("r apple", "y pear", "y cherry", "g watermelon",
              "pp grape", "y apple pear"), weight = c(0.5, 0.4, 0.1, 5.0, 0.5, 0.4)),
              class = "data.frame", row.names = c(NA, -6L))
      
      # Remove the first characters preceding a white space in the column "name"
      df2 <- df %>% 
              mutate(name = str_replace(name, "^\\S* ", ""))
      

      正则表达式"^\\S* "搜索从字符串开头到第一个空格的所有字符。

      【讨论】:

        猜你喜欢
        • 2019-06-16
        • 1970-01-01
        • 2016-04-26
        • 2021-10-15
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        相关资源
        最近更新 更多