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"
worddplyr/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"