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


当前回答

str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)

> [1] "example"
> 

其他回答

对于那些来自Microsoft Excel或谷歌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"

我也使用substr,但方式不同。我想提取“给我你的食物”的最后6个字符。以下是步骤:

(1)拆分字符

splits <- strsplit("Give me your food.", split = "")

(2)提取最后6个字符

tail(splits[[1]], n=6)

输出:

[1] " " "f" "o" "o" "d" "."

每个字符都可以通过分割[[1]][x]访问,其中x是1到6。

一个简单的基于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!"

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

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

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

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

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

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