我可以删除字符串中的最后一个字符:
listfruit <- c("aapplea","bbananab","oranggeo")
gsub('.{1}$', '', listfruit)
但是我在尝试从字符串中删除第一个字符时遇到问题。 还有第一个也是最后一个角色。 我很感激你的帮助。
答案 0 :(得分:9)
如果我们需要移除第一个字符,请使用sub
,匹配一个字符(.
表示单个字符),将其替换为''
。
sub('.', '', listfruit)
#[1] "applea" "bananab" "ranggeo"
或者对于第一个和最后一个字符,匹配字符串开头的字符(^.
)或字符串的结尾(.$
)并将其替换为''
。
gsub('^.|.$', '', listfruit)
#[1] "apple" "banana" "rangge"
我们也可以将其作为一组捕获并替换为反向引用。
sub('^.(.*).$', '\\1', listfruit)
#[1] "apple" "banana" "rangge"
另一种选择是使用substr
substr(listfruit, 2, nchar(listfruit)-1)
#[1] "apple" "banana" "rangge"
答案 1 :(得分:4)
library(stringr)
str_sub(listfruit, 2, -2)
#[1] "apple" "banana" "rangge"
删除第一个和最后一个字符。
答案 2 :(得分:0)
对我来说,性能很重要,因此我对可用的解决方案进行了快速基准测试。
library(magrittr)
comb_letters = combn(letters,5) %>% apply(2, paste0,collapse = "")
bench::mark(
gsub = {gsub(pattern = '^.|.$',replacement = '',x = comb_letters)},
substr = {substr(comb_letters,start = 2,stop = nchar(comb_letters) - 1)},
str_sub = {stringr::str_sub(comb_letters,start = 2,end = -2)}
)
#> # A tibble: 3 x 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 gsub 32.9ms 33.7ms 29.7 513.95KB 0
#> 2 substr 15.07ms 15.84ms 62.7 1.51MB 2.09
#> 3 str_sub 5.08ms 5.36ms 177. 529.34KB 2.06
由reprex package(v0.3.0)于2019-12-30创建