2016-08-14 14 views
0

Я пытаюсь извлечь даты из 40k URL-адресов. 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.

Я что-то не хватает?

+0

есть ли NUM выходы на URL, кроме даты .. –

+1

Try 'ГМД (as.numeric (GSUB (». */(\\ d {4}/\\ d {2}/\ \ d {2}) /.* "," \\ 1 ", df $ URL)))' –

+0

Ваше основное решение работает просто отлично даже с 40k размером вектора URL-адресов. '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)' 'date = ymd (as.numeric (gsub (" \\ D "," ", urls)))' –

ответ

0

Попробуйте

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

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/") 
0

несколько способов с использованием 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() 
Смежные вопросы