df <- data.frame(
strings = c('blah?ha', 'foo?bar', 'cats?dogs')
)
df %>%
mutate(first_word = str_split(strings, fixed('?')))
strings first_word
strings first_word
1 blah?ha blah, ha
2 foo?bar foo, bar
3 cats?dogs cats, dogs
这让我更接近我的目标。我只想要第一部分,废话,foo和猫。尝试过:
df %>%
+ mutate(first_word = str_split(strings, fixed('?'))[[1]][[1]])
strings first_word
1 blah?ha blah
2 foo?bar blah
3 cats?dogs blah
这让我在该列中重复了相同的单词。
如何获得包含 blah、foo 和 cats 值的新列?
最佳答案
我们可以使用 str_extract
从一开始就匹配一个或多个不是 ?
([^?]+
) 的字符 ( ^
) 的字符串
library(dplyr)
library(stringr)
df %>%
mutate(first_word = str_extract(strings, "^[^?]+"))
或者使用 trimws
和 whitespace
作为正则表达式
df %>%
mutate(first_word = trimws(strings, whitespace = "\\?.*"))
或base R
中的类似代码
df$first_word <- with(df, trimws(strings, whitespace = "\\?.*"))
OP 代码中的问题是它仅从 str_split
中提取第一个 list
元素 ([[1]]
)。它需要循环 list
并获取 first
元素
library(purrr)
df %>%
mutate(first_word = map_chr(str_split(strings, fixed("?")), first))
# strings first_word
#1 blah?ha blah
#2 foo?bar foo
#3 cats?dogs cats
关于r - 将所有内容都放在 ? 的左侧在带有 mutate 的 dplyr 链期间的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66464408/