R 字符串拆分的第一个条目

R 字符串拆分的第一个条目,r,split,R,Split,我有一个专栏people$food,里面有巧克力或苹果橙草莓之类的条目 我想按-拆分人$food,并从拆分中获取第一个条目 在python中,解决方案是food.split('-')[0],但我找不到与R word <- 'apple-orange-strawberry' strsplit(word, "-")[[1]][1] [1] "apple" 其基本思想是,split作为结果给出一个列表,其元素必须通过切片(前一种情况)或取消列表(后一种情况)来访问 如果要将该方法应用于整个列

我有一个专栏
people$food
,里面有
巧克力
苹果橙草莓
之类的条目

我想按
-
拆分
人$food
,并从拆分中获取第一个条目

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

word <- 'apple-orange-strawberry'

strsplit(word, "-")[[1]][1]
[1] "apple"
其基本思想是,
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"
first.word我会改用
sub()
。由于您希望在拆分之前使用第一个“单词”,因此我们可以简单地删除第一个
-
之后的所有内容,这就是我们剩下的内容

sub("-.*", "", people$food)
这里有一个例子-

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

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

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

sapply(strsplit(word,"-"), `[`, 1)
#[1] "apple"     "chocolate"
这两个代码位都能很好地处理在拆分列表中选择哪个值的问题,并能处理超出范围的情况:

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

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

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

word
dplyr/magrittr
方法:

library(magrittr)
library(dplyr)

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

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

strsplit
是矢量化的,因此没有必要在矢量中的每个单独项目上都使用它。请参见下面我的答案。顺便说一句,对于非R本地人来说,这个
sapply(strsplit(单词,“-”),
[
,1)
完全不可读。我想如果你想用一个词来代替,而你只需要一个值,你可以做
sapply(strsplit(word,“-”),getElement,1)
使用“getElement”这个词可以增加很多可读性(从而提高质量)。谢谢
vapply(strsplit(word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA  
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple"     "chocolate"
library(magrittr)
library(dplyr)

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

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