2016-08-14 124 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未能解析。它给这些4714价值的NAs。

我错过了什么吗?

+0

是存在于URL任何NUM比退出日期其他.. –

+1

试'YMD(as.numeric(GSUB(”。* /(\\ d {4}/\\ d {2}/\ \ d {2})/.*“,”\\ 1“,df $ URL)))' –

+0

即使使用40k大小的网址向量,您的主要解决方案也能正常工作。 '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“,”“,url)))'' –

回答

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

使用stringr直接stringi基础几个方面:

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()