使用gsub删除R中第一个空格之前的所有字符串

时间:2015-09-24 17:08:12

标签: regex r gsub

我有一个这样的数据框:

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
...  ...

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

4 个答案:

答案 0 :(得分:12)

试试这个:

sub(".*? (.+)", "\\1", D$name)

编辑:

该模式在第一个空格之前向上寻找任何字符零次或多次(.*),然后在第一个空格之后捕获一个或多个字符((.+))。 ?之后的.*使其“懒惰”而非“贪婪”,并使其停留在找到的第一个空间。因此,.*?匹配第一个空格之前的所有内容,空格匹配找到的第一个空格,捕获组((.+))匹配我们想要保留的内容。然后,sub的第二个参数返回使用\\1分组的捕获,以替换整个匹配。

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

我们假设您的数据框被称为' df'

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

答案 3 :(得分:1)

以下解决方案不使用 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* "搜索从字符串开头到第一个空格的所有字符。