从R中的string中提取最后n个字符

如何从R中的string获取最后的n个字符? 有没有像SQL的权利function?

我没有意识到任何基于R的东西,但是使用substrnchar做一个函数是很简单的:

 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指出,这是vector化的。 考虑:

 x <- c("some text in a string", "I really need to learn how to count") substrRight(x, 6) [1] "string" " count" 

如果您不介意使用stringr软件包,则str_sub非常方便,因为您可以使用负数来反向计数:

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

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

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

使用stringi包中的stri_sub函数。 要从最后获得子string,请使用负数。 请看下面的例子:

 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上可用,只需input

 install.packages("stringi") 

安装这个包。

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

更新 :如mdsumner所指出的,原始代码已经被vector化,因为substr是。 应该更加小心。

如果你想要一个vector化的版本(基于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字符。

另一个相当直接的方法是使用正则expression式和sub

 sub('.*(?=.$)', '', string, perl=T) 

所以,“摆脱一个人物所有的一切”。 为了抓取更多的字符,在前视断言中join许多点:

 sub('.*(?=.{2}$)', '', string, perl=T) 

其中.{2}意思是,或“任何两个字符”,所以意思是“摆脱一切后面跟着两个字符”。

 sub('.*(?=.{3}$)', '', string, perl=T) 

三个字符等。您可以设置字符的数量来抓取一个variables,但你必须paste到正则expression式string的variables值:

 n = 3 sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T) 

substr的替代方法是将string拆分为单个字符的列表并处理:

 N <- 2 sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N) 

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

(1)分割字符

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

(2)提取最后6个字符

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

输出:

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

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

以前有人使用类似的解决scheme,但我觉得更容易思考如下:

 > 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)) 

这将根据需要带来最后的字符。

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

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

你可以玩nchar(stringOfInterest)来弄清楚如何得到最后几个字符。

@Andrie解决scheme的一些修改也给了补充:

 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"