df <- data.frame(words = c('apple-orange-strawberry', 'chocolate'))
mutate(df, short = stringr::str_remove(words, "-.*")) # mutate method
stringr::str_remove(df$words, "-.*") # str_remove example
stringr::str_replace(df$words, "-.*", "") # str_replace method
stringr::str_split_fixed(df$words, "-", n=2)[,1] # str_split method similar to original question's Python code
tidyr::separate(df, words, into = c("short", NA)) # using the separate function
words short
1 apple-orange-strawberry apple
2 chocolate chocolate
7条答案
按热度按时间5jdjgkvh1#
如果需要从每个拆分中提取第一个(或
nth
)条目,请用途:或者更快更明确地说:
这两段代码都可以很好地科普在拆分列表中选择的值,并且可以处理超出范围的情况:
bakd9h0s2#
例如
或者等价地
本质上,其思想是
split
给出一个列表作为结果,其元素必须通过分片(前一种情况)或取消列表(后一种情况)来访问。如果要将方法应用于整列:
k3fezbri3#
我会用
sub()
来代替,因为你想要在拆分之前的第一个单词,我们可以简单地删除第一个-
之后的所有单词,这就是我们剩下的。我举个例子-
否则,如果要使用
strsplit()
,可以使用vapply()
对前几个元素进行舍入qvtsj1bj4#
我建议在R中使用
head
而不是[
。6pp0gazn5#
dplyr/magrittr
方法:dgsult0t6#
使用
str_remove()
删除模式之后的所有内容:mzmfm0qo7#
stringr
1.5.0引入了str_split_i
来轻松实现这一点:第三个参数表示要提取的索引。另外一个新特性是可以使用负值从右侧开始索引: