我的专栏people$food
包含chocolate
或apple-orange-strawberry
等条目。
我希望将people$food
拆分为-
,然后从拆分中获取第一个条目。
在python中,解决方案是food.split('-')[0]
,但我找不到R的等价物。
答案 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"