library(tidyverse)
我有以下字符串:
str <- "1170\t{\r\n1170\t 860\r\n1170\t 5530\r\n1170\t 690\r\n1170\t 1200\r\n1170\t 390\r\n1170\t 740\r\n1170\t 350\r\n1170\t 490\r\n1170\t 360\r\n1170\t 440\r\n1170\t 450\r\n1170\t 580\r\n1170\t 620\r\n1170\t 740\r\n1300\t 730\r\n1300\t 870\r\n1300\t 800\r\n1300\t 850\r\n1300\t 810\r\n1300\t 870\r\n1300\t 830\r\n1300\t 860\r\n1300\t 1050\r\n1300\t 540\r\n1300\t 550\r\n1300\t 300\r\n1300\t 280\r\n1300\t 190\r\n1430\t 150\r\n1430\t 90\r\n1430\t 70\r\n1430\t 40\r\n1430\t 908\r\n1430\t 1238\r\n1430\t 3553\r\n1430\t 588\r\n1430\t 73\r\n1430\t 65480\r\n1430\t 19714\r\n1430\t 2756\r\n1430\t}"
我想做的是提取最远的数字(1170)和 \ r 之前的所有其他数字(860、5530、690、1200等)。到目前为止,我的工作是这样的:
str_match(str, "(\\d+)\\t\\{\\s*([^.]*)\\t\\}")
#> [,1]
#> [1,] "1170\t{\r\n1170\t 860\r\n1170\t 5530\r\n1170\t 690\r\n1170\t 1200\r\n1170\t 390\r\n1170\t 740\r\n1170\t 350\r\n1170\t 490\r\n1170\t 360\r\n1170\t 440\r\n1170\t 450\r\n1170\t 580\r\n1170\t 620\r\n1170\t 740\r\n1300\t 730\r\n1300\t 870\r\n1300\t 800\r\n1300\t 850\r\n1300\t 810\r\n1300\t 870\r\n1300\t 830\r\n1300\t 860\r\n1300\t 1050\r\n1300\t 540\r\n1300\t 550\r\n1300\t 300\r\n1300\t 280\r\n1300\t 190\r\n1430\t 150\r\n1430\t 90\r\n1430\t 70\r\n1430\t 40\r\n1430\t 908\r\n1430\t 1238\r\n1430\t 3553\r\n1430\t 588\r\n1430\t 73\r\n1430\t 65480\r\n1430\t 19714\r\n1430\t 2756\r\n1430\t}"
#> [,2]
#> [1,] "1170"
#> [,3]
#> [1,] "1170\t 860\r\n1170\t 5530\r\n1170\t 690\r\n1170\t 1200\r\n1170\t 390\r\n1170\t 740\r\n1170\t 350\r\n1170\t 490\r\n1170\t 360\r\n1170\t 440\r\n1170\t 450\r\n1170\t 580\r\n1170\t 620\r\n1170\t 740\r\n1300\t 730\r\n1300\t 870\r\n1300\t 800\r\n1300\t 850\r\n1300\t 810\r\n1300\t 870\r\n1300\t 830\r\n1300\t 860\r\n1300\t 1050\r\n1300\t 540\r\n1300\t 550\r\n1300\t 300\r\n1300\t 280\r\n1300\t 190\r\n1430\t 150\r\n1430\t 90\r\n1430\t 70\r\n1430\t 40\r\n1430\t 908\r\n1430\t 1238\r\n1430\t 3553\r\n1430\t 588\r\n1430\t 73\r\n1430\t 65480\r\n1430\t 19714\r\n1430\t 2756\r\n1430"
任何帮助表示赞赏。
菲尔
由reprex package(v0.2.1)于2018-12-04创建
答案 0 :(得分:0)
library(stringr)
library(dplyr)
str <- "1170\t{\r\n1170\t 860\r\n1170\t 5530\r\n1170\t 690\r\n1170\t 1200\r\n1170\t 390\r\n1170\t 740\r\n1170\t 350\r\n1170\t 490\r\n1170\t 360\r\n1170\t 440\r\n1170\t 450\r\n1170\t 580\r\n1170\t 620\r\n1170\t 740\r\n1300\t 730\r\n1300\t 870\r\n1300\t 800\r\n1300\t 850\r\n1300\t 810\r\n1300\t 870\r\n1300\t 830\r\n1300\t 860\r\n1300\t 1050\r\n1300\t 540\r\n1300\t 550\r\n1300\t 300\r\n1300\t 280\r\n1300\t 190\r\n1430\t 150\r\n1430\t 90\r\n1430\t 70\r\n1430\t 40\r\n1430\t 908\r\n1430\t 1238\r\n1430\t 3553\r\n1430\t 588\r\n1430\t 73\r\n1430\t 65480\r\n1430\t 19714\r\n1430\t 2756\r\n1430\t}"
几行:
> str %>% writeLines()
1170 {
1170 860
1170 5530
1170 690
此代码在左侧给出了所有数字:
str_match_all(str, "(\\d{1,})\\t") %>%
data.frame(stringsAsFactors = FALSE) %>%
.$X2 %>%
as.numeric()