在R中使用随机数字/字符提取/删除整数或字符串的部分

use*_*691 2 r substr

说我有一个整数

x <- as.integer(442009)
Run Code Online (Sandbox Code Playgroud)

或字符串

y <- "a10ba3m1"
Run Code Online (Sandbox Code Playgroud)

如何消除任何长度的整数/字符串的最后两位数/字符?

jos*_*ber 6

substr 返回子串:

substr(x, 1, nchar(x)-2)
# [1] "4420"
substr(y, 1, nchar(y)-2)
# [1] "a10ba3"
Run Code Online (Sandbox Code Playgroud)


Gre*_*now 5

如果您知道该值是整数,则可以将其除以100并转换回整数(去掉小数部分)。这可能比将其转换为字符串然后返回的效率更高。

> x <- as.integer(442009)
> floor(x/100)
[1] 4420
Run Code Online (Sandbox Code Playgroud)

如果您只想删除字符串的最后2个字符,则substr可以使用。

或者,这是一个能很好执行的正则表达式(效率不如substr

> y <- "a10ba3m1"
> sub("..$", "", y)
[1] "a10ba3"
Run Code Online (Sandbox Code Playgroud)

如果要从字符串中删除最后两位数字(不是任何字符),并且不能保证最后两位数字位于最后两位,那么这是一个有效的正则表达式:

> sub("[0-9]?([^0-9]*)[0-9]([^0-9]*)$", "\\1\\2", y)
[1] "a10bam"
Run Code Online (Sandbox Code Playgroud)

如果您想删除最多2位出现在最后的数字(但如果后面有任何非数字,则不要删除),请使用以下正则表达式:

> sub("[0-9]{1,2}$", "", y)
[1] "a10ba3m"
Run Code Online (Sandbox Code Playgroud)