如何从R中的字符串中获得最后n个字符? 有没有像SQL的RIGHT这样的函数?
当前回答
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
其他回答
另一种合理直接的方法是使用正则表达式和sub:
sub('.*(?=.$)', '', string, perl=T)
所以,“去掉后跟一个字符的所有东西”。为了获取更多字符,在lookahead断言中添加任意数量的圆点:
sub('.*(?=.{2}$)', '', string, perl=T)
其中。{2}表示..或“任意两个字”,意思是“去掉后跟两个字的东西”。
sub('.*(?=.{3}$)', '', string, perl=T)
对于三个字符,等等。你可以用一个变量设置要抓取的字符数,但你必须将变量值粘贴到正则表达式字符串中:
n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)
一个简单的基于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!"
我不知道base R中的任何东西,但它是直接使用substr和nchar创建一个函数来做到这一点:
x <- "some text in a string"
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
substrRight(x, 6)
[1] "string"
substrRight(x, 8)
[1] "a string"
正如@mdsumner指出的那样,这是向量化的。考虑:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
对@Andrie的解决方案做了一点修改,也得到了补充:
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"
我使用下面的代码来获取字符串的最后一个字符。
substr(output, nchar(stringOfInterest), nchar(stringOfInterest))
您可以使用nchar(stringOfInterest)来计算如何获取最后几个字符。