字符串拆分的第一个条目

时间:2015-11-13 00:17:06

标签: r split

我的专栏people$food包含chocolateapple-orange-strawberry等条目。

我希望将people$food拆分为-,然后从拆分中获取第一个条目。

在python中,解决方案是food.split('-')[0],但我找不到R的等价物。

5 个答案:

答案 0 :(得分:25)

如果您需要从每个拆分中提取第一个(或nth)条目,请使用:

word <- c('apple-orange-strawberry','chocolate')

sapply(strsplit(word,"-"), `[`, 1)
#[1] "apple"     "chocolate"

或更快,更明确:

vapply(strsplit(word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "apple"     "chocolate"

这两段代码都可以很好地处理拆分列表中的任何值,并处理超出范围的案例:

vapply(strsplit(word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA  

答案 1 :(得分:14)

例如

word <- 'apple-orange-strawberry'

strsplit(word, "-")[[1]][1]
[1] "apple"

或等同于

unlist(strsplit(word, "-"))[1].

基本上这个想法是split给出了一个列表作为结果,其元素必须通过切片(前一种情况)或通过不列名(后者)来访问。

如果要将该方法应用于整个列:

first.word <- function(my.string){
    unlist(strsplit(my.string, "-"))[1]
}

words <- c('apple-orange-strawberry', 'orange-juice')

R: sapply(words, first.word)
apple-orange-strawberry            orange-juice 
                "apple"                "orange"

答案 2 :(得分:6)

我会改用sub()。因为你想要第一个&#34;字&#34;在拆分之前,我们可以在第一个-之后删除所有内容,以及我们剩下的内容。

sub("-.*", "", people$food)

这是一个例子 -

x <- c("apple", "banana-raspberry-cherry", "orange-berry", "tomato-apple")
sub("-.*", "", x)
# [1] "apple"  "banana" "orange" "tomato"

否则,如果您想使用strsplit(),可以使用vapply()

对第一个元素进行舍入
vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "apple"  "banana" "orange" "tomato"

答案 3 :(得分:2)

我建议在R中使用head而不是[

word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple"     "chocolate"

答案 4 :(得分:0)

dplyr/magrittr方法:

library(magrittr)
library(dplyr)

word = c('apple-orange-strawberry', 'chocolate')

strsplit(word, "-") %>% sapply(extract2, 1)
# [1] "apple"     "chocolate"