Соответствующие числа между пышными скобками - PullRequest
0 голосов
/ 05 декабря 2018
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"

Любая помощь приветствуется.Фил
Создан 2018-12-04 пакетом представ (v0.2.1)

1 Ответ

0 голосов
/ 05 декабря 2018
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...