And*_*rie 261
我不知道基础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"
Run Code Online (Sandbox Code Playgroud)
正如@mdsumner指出的那样,这是矢量化的.考虑:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
Run Code Online (Sandbox Code Playgroud)
Xu *_*ang 187
如果您不介意使用该stringr
包,str_sub
则很方便,因为您可以使用底片向后计数:
x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"
Run Code Online (Sandbox Code Playgroud)
或者,正如Max在对此答案的评论中指出的那样,
str_sub(x, start= -6)
[1] "string"
Run Code Online (Sandbox Code Playgroud)
bar*_*nus 43
使用包中的stri_sub
功能stringi
.要从末尾获取子字符串,请使用负数.请看下面的示例:
stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"
Run Code Online (Sandbox Code Playgroud)
您可以从github安装此软件包:https://github.com/Rexamine/stringi
它现在可以在CRAN上使用,只需键入即可
install.packages("stringi")
Run Code Online (Sandbox Code Playgroud)
安装此包.
And*_*rew 20
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
Run Code Online (Sandbox Code Playgroud)
小智 12
尝试这个:
x <- "some text in a string"
n <- 5
substr(x, nchar(x)-n, nchar(x))
Run Code Online (Sandbox Code Playgroud)
它应该给出:
[1] "string"
Run Code Online (Sandbox Code Playgroud)
Lau*_*ent 10
更新:如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"
Run Code Online (Sandbox Code Playgroud)
请注意,我已经改变(nchar(x)-n)
,以(nchar(x)-n+1)
获得n
字符.
另一种相当简单的方法是使用正则表达式和sub
:
sub('.*(?=.$)', '', string, perl=T)
Run Code Online (Sandbox Code Playgroud)
所以,"摆脱一切后跟一个角色".要在最后抓取更多字符,请在前瞻断言中添加多个点:
sub('.*(?=.{2}$)', '', string, perl=T)
Run Code Online (Sandbox Code Playgroud)
其中的.{2}
意思..
,或"任意两个字符",意思是"摆脱一切后跟两个字符".
sub('.*(?=.{3}$)', '', string, perl=T)
Run Code Online (Sandbox Code Playgroud)
对于三个字符等,您可以设置要使用变量抓取的字符数,但是您必须将paste
变量值放入正则表达式字符串中:
n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)
Run Code Online (Sandbox Code Playgroud)
一个简单的基本R解决方案使用该substring()
功能(谁知道这个功能甚至存在?):
RIGHT = function(x,n){
substring(x,nchar(x)-n+1)
}
Run Code Online (Sandbox Code Playgroud)
这利用了基本上在substr()
下面,但默认结束值为1,000,000.
例子:
> RIGHT('Hello World!',2)
[1] "d!"
> RIGHT('Hello World!',8)
[1] "o World!"
Run Code Online (Sandbox Code Playgroud)
另一种方法substr
是将字符串拆分为单个字符列表并处理:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)
Run Code Online (Sandbox Code Playgroud)