在R中从字符串中提取最后n个字符

370

如何在R中获取字符串的最后n个字符?是否有像SQL的RIGHT函数一样的函数?

15个回答

4

对于那些熟悉Microsoft Excel或Google 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"


4

之前有人使用过与我类似的解决方案,但我发现以下思路更容易理解:

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

这将按需获取最后的字符。

1
我使用以下代码获取字符串的最后一个字符。
    substr(output, nchar(stringOfInterest), nchar(stringOfInterest))

你可以使用nchar(stringOfInterest)来玩耍,以找出如何获取最后几个字符。

0
稍微修改一下@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"

0

只是以防万一需要选择一系列字符:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接