从通过重复标点符号连接的字符串的列中提取数字

Extracting numbers from column with string connected through repeated punctuation character

我有一列包含这样的值:

string.b.string.1.
string.b.string.2.
string.b.string.3.
string.b.string.10.
string.b.string.300.

以此类推,数字从0到300

我需要从该列中提取并删除数字并将其放入另一列,从而产生如下输出:

"Id"          "Variable"   
1             string.b.string
2             string.b.string
3             string.b.string
10            string.b.string
300           string.b.string

到目前为止,我对 gsub() 或 readr::parse_number() 的所有尝试都惨遭失败,因为我只是不明白这些 gsub() 函数的语法。我通常失败了,因为“。”在变量中重复...

非常感谢任何帮助,谢谢!

您可以使用 tidyr::extract :

tidyr::extract(df, V1, c('Variable', 'Id'), '(.*?)(\d+)', convert = TRUE) 

#          Variable  Id
#1 string.b.string.   1
#2 string.b.string.   2
#3 string.b.string.   3
#4 string.b.string.  10
#5 string.b.string. 300

数据

df <- structure(list(V1 = c("string.b.string.1.", "string.b.string.2.", 
"string.b.string.3.", "string.b.string.10.", "string.b.string.300."
)), class = "data.frame", row.names = c(NA, -5L))

您可以使用 basestrcapture

strcapture("(.*)\.(\d+)", df$V1,
 data.frame(Variable=character(), Id=integer()))
#         Variable  Id
#1 string.b.string   1
#2 string.b.string   2
#3 string.b.string   3
#4 string.b.string  10
#5 string.b.string 300

使用base R

read.csv(text = sub("(.*)\.(\d+)\.$", "\1,\2", df$V1), header = FALSE,
      col.names = c('Variable', 'Id'))

-输出

#         Variable  Id
#1 string.b.string   1
#2 string.b.string   2
#3 string.b.string   3
#4 string.b.string  10
#5 string.b.string 300