R 分隔两个不同的分隔符并截断

问题描述 投票:0回答:2

我有一个小故事,例如

a <- as_tibble(c("201.1, 202 (abc) 203, 204", "301 / 302.22 def, 303"))

  value                  
  <chr>                  
1 201.1, 202 (abc) 203, 204
2 301 / 302.22 def, 303    

现在我想得到一个有两列的data.frame

[1,] 201.1  202
[2,] 301    302.22

通过剪切第二个数字之后的所有内容(第一行中的 202,第二行中的 302.22)并且用分隔符“,”或“/”分隔表达式的剩余部分以获得两列。

r delimiter strsplit
2个回答
0
投票

我的尝试:

b <- stringr::str_extract(a$value, "([\\.\\d]+)\\D+([\\.\\d]+)\\D+.*", group = c(1, 2))

正则表达式的目的是:

捕获组 1 = 一个或多个 [数字或 .s]
然后是一个或多个非数字
然后捕获组 2 = 一个或多个 [数字或 .s]
然后是一个或多个非数字
然后是任意数量的其他字符

仅返回捕获组 1 和 2。


0
投票

你可以尝试一下,

do.call(rbind, lapply(a$value, \(i) { 
            i1 <- regmatches(i, gregexpr("\\d+\\.?\\d*", i))[[1]]; return(i1[c(1, 2)])}))

     [,1]    [,2]    
[1,] "201.1" "202"   
[2,] "301"   "302.22"
© www.soinside.com 2019 - 2024. All rights reserved.