我有向量:
v <- c("godzilla", "jurassic", "googly")
我需要这个向量中每个元素的前3个字母。我希望得到:
# "god" "jur" "goo"
我已经用apply试过了,但是没有用,怎么办?
apply
vpfxa7rd1#
一个选项是substring():
substring()
> substring(v, first = 1, last = 3) [1] "god" "jur" "goo"
或者R版本,substr()
substr()
> substr(v, start = 1, stop = 3) [1] "god" "jur" "goo"
注意所需的首字符和末字符的不同名称。由于这两个函数都是矢量化的,所以这里不需要apply()和朋友。
apply()
nkoocmlb2#
为了好玩,您可以在这里使用正则表达式:
sub('(^.{3}).*','\\1',v) [1] "god" "jur" "goo"
这是另一个矢量化的解决方案。
06odsfpq3#
@Gavin Simpson的答案是正确的,但如果你想在这里使用apply()和朋友,你可以尝试以下方法:
> sapply(strsplit(v, ""), function(x) paste0(x[1:3], collapse="")) [1] "god" "jur" "goo"
g52tjvyc4#
stringr选项为str_sub:
stringr
str_sub
str_sub(v, 1, 3) #[1] "god" "jur" "goo"
以及str_sub_all,用于每个字符串中的多个子字符串:
str_sub_all
str_sub_all(v, c(1, 2), c(3, 4)) # [[1]] # [1] "god" "odz" # # [[2]] # [1] "jur" "ura" # # [[3]] # [1] "goo" "oog"
4条答案
按热度按时间vpfxa7rd1#
一个选项是
substring()
:或者R版本,
substr()
注意所需的首字符和末字符的不同名称。
由于这两个函数都是矢量化的,所以这里不需要
apply()
和朋友。nkoocmlb2#
为了好玩,您可以在这里使用正则表达式:
这是另一个矢量化的解决方案。
06odsfpq3#
@Gavin Simpson的答案是正确的,但如果你想在这里使用
apply()
和朋友,你可以尝试以下方法:g52tjvyc4#
stringr
选项为str_sub
:以及
str_sub_all
,用于每个字符串中的多个子字符串: