Извлечение даты из строки (URL)

Я пытаюсь извлечь даты из 40 тыс. URL-адресов. URL-адреса такие:

1) ht-p://mashable.com/2014/09/19/shonda-rhimes-new-york-times/
2) http://mashable.com-2014/11/02/friendly-robbers-snl-sketch/

Я использую это:

ymd(as.numeric(gsub("\\D", "", df$URL)))  

который отлично работал с 1 или 2 записями, но с 40k записями это дает мне

Предупреждающее сообщение: 4714 не удалось проанализировать. Это дает NA для этих 4714 значений.

Я что-то упускаю?


person vine_J    schedule 14.08.2016    source источник
comment
есть ли какие-либо выходы по URL-адресу, кроме даты..   -  person Avinash Raj    schedule 14.08.2016
comment
попробуй ymd(as.numeric(gsub(".*/(\\d{4}/\\d{2}/\\d{2})/.*", "\\1", df$URL)))   -  person Avinash Raj    schedule 14.08.2016
comment
Ваше основное решение отлично работало даже с вектором URL-адресов размером 40 тыс. urls = rep(c("ht-p://mashable.com/2014/09/19/shonda-rhimes-new- york-times/", "http://mashable.com-2014/11/02/friendly-robbers-snl-sketch/"), 20000) dates = ymd(as.numeric(gsub("\\D", "", urls)))   -  person Aleksandr    schedule 15.08.2016


Ответы (3)


Использование str_extract формы stringr пакета:

library(stringr)
as.Date(str_extract(txts,"[0-9]{4}/[0-9]{2}/[0-9]{2}"),"%Y/%m/%d")
## [1] "2014-09-19" "2014-11-02"

где txts:

txts <- c("ht-p://mashable.com/2014/09/19/shonda-rhimes-new-york-times/",
"http://mashable.com-2014/11/02/friendly-robbers-snl-sketch/")
person agstudy    schedule 14.08.2016

Попробуй это

library(stringr)
sapply(str_extract_all(string = df$URL,pattern = "[[:digit:]]+"),function(t) paste0(tail(t,n = 3),collapse = "/"))
person user2100721    schedule 14.08.2016

Пара способов использования stringi основ stringr напрямую:

library(lubridate)
library(stringi)
library(magrittr)

c("ht-p://mashable.com/2014/09/19/shonda-rhimes-new-york-times/",
  "http://mashable.com-2014/11/02/friendly-robbers-snl-sketch/") -> URLs

URLs %>% 
  stri_extract_all_regex("([[:digit:]]{4}/[[:digit:]]{2}/[[:digit:]]{2})", simplify=TRUE) %>% 
  ymd(.[,1])


URLs %>% 
  stri_match_all_regex("([[:digit:]]{4}/[[:digit:]]{2}/[[:digit:]]{2})") %>% 
  lapply("[", 2) %>% 
  unlist() %>% 
  ymd()
person hrbrmstr    schedule 14.08.2016