如何在R中获取字符串的最后n个字符?是否有像SQL的RIGHT函数一样的函数?
对于那些熟悉Microsoft Excel或Google Sheets的人,您可能会看到类似于LEFT()
、RIGHT()
和MID()
等函数。我创建了一个名为forstringr的软件包,其开发版本目前在Github上。
if(!require("devtools")){
install.packages("devtools")
}
devtools::install_github("gbganalyst/forstringr")
library(forstringr)
str_left()
:从左边开始计数,并提取n个字符
str_right()
:从右边开始计数,并提取n个字符
str_mid()
:从中间提取字符
示例:
x <- "some text in a string"
str_left(x, 4)
[1] "some"
str_right(x, 6)
[1] "string"
str_mid(x, 6, 4)
[1] "text"
之前有人使用过与我类似的解决方案,但我发现以下思路更容易理解:
> text<-"some text in a string" # we want to have only the last word "string" with 6 letter
> n<-5 #as the last character will be counted with nchar(), here we discount 1
> substr(x=text,start=nchar(text)-n,stop=nchar(text))
substr(output, nchar(stringOfInterest), nchar(stringOfInterest))
substrR <- function(x, n) {
if(n > 0) substr(x, (nchar(x)-n+1), nchar(x)) else substr(x, 1, (nchar(x)+n))
}
x <- "moSvmC20F.5.rda"
substrR(x,-4)
[1] "moSvmC20F.5"
这正是我在寻找的。并且它邀请到左侧:
substrL <- function(x, n){
if(n > 0) substr(x, 1, n) else substr(x, -n+1, nchar(x))
}
substrL(substrR(x,-4),-2)
[1] "SvmC20F.5"
只是以防万一需要选择一系列字符:
# For example, to get the date part from the string
substrRightRange <- function(x, m, n){substr(x, nchar(x)-m+1, nchar(x)-m+n)}
value <- "REGNDATE:20170526RN"
substrRightRange(value, 10, 8)
[1] "20170526"