Как извлечь дату из многострочной строки или файла в R - PullRequest
0 голосов
/ 29 сентября 2019

Предположим, есть файл с многострочной строкой, такой как:

/ Анализ, сделанный 28 сентября 2011 года, люди, которые много тренируются, здоровы /

Какмогу ли я извлечь дату 28 сентября 2011 из всего файла или строки независимо от месяца в дате или с заглавной буквы?

1 Ответ

1 голос
/ 29 сентября 2019

Я предполагаю, что у вас есть несколько дат, которые вы хотите извлечь здесь, и что вы хотите, чтобы результатом были типы дат (если нет, просто передайте их в format() с нужной вам спецификацией strptime(), например, %e %B %Y - но преобразование в дату сначала стандартизирует их, потому что, например, здесь у вас есть название месяца в нижнем регистре).

Здесь я использую встроенный в R вектор month.name полного месяцаимена и создание из него одной строки регулярного выражения, которая будет соответствовать любому тексту с любым именем месяца, окруженным числами даты и года. В итоге мы получаем список символьных векторов, по одному вектору для каждой строки документа, со всеми строками даты, извлеченными из них по порядку, и затем я сопоставляю as_date() с ними с соответствующим шаблоном анализа, так что они на самом деле являются датами Rсейчас.

  library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date
  library(tidyverse)

  string <- 
    "Analysis made on 28 september 2011 people who exercise a lot are healthy
Another analysis on 6 May 1998 found otherwise"

  pattern <-  
    paste("[:digit:]{1,2}", month.name, "[:digit:]{4}", 
          collapse = "|") %>% 
    regex(ignore_case = TRUE)

  pattern
#> [1] "[:digit:]{1,2} January [:digit:]{4}|[:digit:]{1,2} February [:digit:]{4}|[:digit:]{1,2} March [:digit:]{4}|[:digit:]{1,2} April [:digit:]{4}|[:digit:]{1,2} May [:digit:]{4}|[:digit:]{1,2} June [:digit:]{4}|[:digit:]{1,2} July [:digit:]{4}|[:digit:]{1,2} August [:digit:]{4}|[:digit:]{1,2} September [:digit:]{4}|[:digit:]{1,2} October [:digit:]{4}|[:digit:]{1,2} November [:digit:]{4}|[:digit:]{1,2} December [:digit:]{4}"
#> attr(,"options")
#> attr(,"options")$case_insensitive
#> [1] TRUE
#> 
#> attr(,"options")$comments
#> [1] FALSE
#> 
#> attr(,"options")$dotall
#> [1] FALSE
#> 
#> attr(,"options")$multiline
#> [1] FALSE
#> 
#> attr(,"class")
#> [1] "regex"     "pattern"   "character"

  str_extract_all(string, pattern) %>% 
    map(as_date, tz = "", format = "%e %B %Y")
#> [[1]]
#> [1] "2011-09-28" "1998-05-06"

Создано в 2019-09-29 пакетом Представить (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...