我可以从字符串中删除最后一个字符:
listfruit <- c("aapplea","bbananab","oranggeo")
gsub('.{1}$', '', listfruit)
Run Code Online (Sandbox Code Playgroud)
但是我在尝试从字符串中删除第一个字符时遇到问题.还有第一个也是最后一个角色.我很感激你的帮助.
dik*_*esh 15
library(stringr)
str_sub(listfruit, 2, -2)
#[1] "apple" "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)
删除第一个和最后一个字符。
akr*_*run 11
如果我们需要删除第一个字符,请使用sub匹配一个字符(.表示单个字符),将其替换为''.
sub('.', '', listfruit)
#[1] "applea" "bananab" "ranggeo"
Run Code Online (Sandbox Code Playgroud)
或者对于第一个和最后一个字符,匹配string(^.)开头的字符或字符串()的结尾,.$并替换为''.
gsub('^.|.$', '', listfruit)
#[1] "apple" "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)
我们也可以将其作为一个组捕获并替换为反向引用.
sub('^.(.*).$', '\\1', listfruit)
#[1] "apple" "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)
另一种选择是 substr
substr(listfruit, 2, nchar(listfruit)-1)
#[1] "apple" "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)
对我来说,性能很重要,所以我用可用的解决方案运行了一个快速的基准测试。
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
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2019 年 12 月 30 日创建