子字符串函数的相反操作

3

有没有办法使用substr()函数并将其指定为从右到左而不是从左到右?

例如,假设我有这个字符串:

x < -“123456gerger7”

我想从最右边的位置开始,并取最后4个字符。

我想到了一种方法,即反转字符串,然后取前4个字符:

rev_str <- rev(strsplit(x, "")[[1]])

reversed_x <- paste(rev_str, collapse = "") answer = substr(reversed_x, 1,4)

但是有没有更快的方法呢?


1
请注意,stringr::str_sub 提供了一个方便的 - 选项:stringr::str_sub(x, -4, -1) - Maël
1个回答

8
这些解决方案仅使用基本的 R 语言。
我们可以使用 substrsubstringnchar。不使用任何包(packages)。
substr(x, nchar(x)-3, nchar(x))
## [1] "ger7"

substring(x, nchar(x)-3)
## [1] "ger7"

sub 也可以。用捕获的4个字符替换跟随4个字符并以字符串结尾的所有内容。

sub(".*(....)$", "\\1", x)
## [1] "ger7"

strcapture函数将返回一个数据框。请截取最后4个字符。

strcapture("(....)$", x, list(x = character(0)))
##      x
## 1 ger7

read.fwf还会返回一个数据框:

read.fwf(textConnection(x), c(nchar(x) - 4, 4))
##          V1   V2
## 1 123456ger ger7

注意

x <- "123456gerger7"

但是写y <- rev(somefunction(rev(x)))更有趣味性 :-) - Carl Witthoft

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