R:分解字符串并获取最后一个元素(按行)

R:分解字符串并获取最后一个元素(按行),r,tidyverse,R,Tidyverse,我有以下数据框 df问题中显示的预期输出有4个元素,但输入有6行,因此我们假设问题中显示的预期输出是错误的,正确的输出如下所示。tes) 现在假设这两个数字前面有一个非数字,请注意\D表示非数字(反斜杠必须在双精度范围内加倍) df %>% mutate(last2 = as.numeric(sub(".*\\D", "", var1))) 给予: var1 last2 1 f253.02.ds.a01 1

我有以下数据框


df问题中显示的预期输出有4个元素,但输入有6行,因此我们假设问题中显示的预期输出是错误的,正确的输出如下所示。tes)

现在假设这两个数字前面有一个非数字,请注意\D表示非数字(反斜杠必须在双精度范围内加倍)

df %>% mutate(last2 = as.numeric(sub(".*\\D", "", var1)))
给予:

              var1 last2
1   f253.02.ds.a01     1
2   f253.02.ds.a02     2
3 f253.02.ds.x.a01     1
4 f253.02.ds.x.a02     2
5   f253.02.ds.a10    10
6             test    NA

使用
separate
,我们可以使用正则表达式查找

library(dplyr)
library(tidyr)
df %>% 
  separate(var1, into = c('prefix', 'suffix'),
      sep="(?<=[a-z])(?=\\d+$)", remove = FALSE, convert = TRUE)
#              var1         prefix suffix
#1   f253.02.ds.a01   f253.02.ds.a      1
#2   f253.02.ds.a02   f253.02.ds.a      2
#3 f253.02.ds.x.a01 f253.02.ds.x.a      1
#4 f253.02.ds.x.a02 f253.02.ds.x.a      2
#5   f253.02.ds.a10   f253.02.ds.a     10
#6             test           test     NA