如何从R中的字符串中获得最后n个字符? 有没有像SQL的RIGHT这样的函数?


当前回答

更新:正如mdsumner所指出的,原始代码已经向量化了,因为substr是。我应该更小心的。

如果你想要一个矢量化的版本(基于Andrie的代码)

substrRight <- function(x, n){
  sapply(x, function(xx)
         substr(xx, (nchar(xx)-n+1), nchar(xx))
         )
}

> substrRight(c("12345","ABCDE"),2)
12345 ABCDE
 "45"  "DE"

注意,我已经将(nchar(x)-n)更改为(nchar(x)-n+1)以获得n个字符。

其他回答

以防万一,如果需要选择一系列字符:

# 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"

如果你不介意使用stringr包,str_sub很方便,因为你可以使用负号来向后计数:

x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"

或者,正如Max在对这个答案的评论中指出的那样,

str_sub(x, start= -6)
[1] "string"

使用stringi包中的stri_sub函数。 要从末尾获得子字符串,请使用负数。 请看下面的例子:

stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"

你可以从github: https://github.com/Rexamine/stringi安装这个包

它是可在CRAN现在,简单的类型

install.packages("stringi")

安装此包。

一个简单的基于R的解决方案,使用substring()函数(谁知道这个函数甚至存在?)

RIGHT = function(x,n){
  substring(x,nchar(x)-n+1)
}

这基本上利用了substr()在下面的优势,但其默认结束值为1,000,000。

例子:

> RIGHT('Hello World!',2)
[1] "d!"
> RIGHT('Hello World!',8)
[1] "o World!"

我使用下面的代码来获取字符串的最后一个字符。

    substr(output, nchar(stringOfInterest), nchar(stringOfInterest))

您可以使用nchar(stringOfInterest)来计算如何获取最后几个字符。