我有一个这样的数据框:
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
... ...
我想删除名称列中第一个空格之前的所有字符。谁有人帮我一个忙?谢谢!
答案 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* "
搜索从字符串开头到第一个空格的所有字符。