2016-08-14 354 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()