从字符串中提取日期(URL)

时间:2016-08-14 08:46:49

标签: r gsub

我正在尝试从40k网址中提取日期。 网址是这样的:

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值提供了NA。

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

使用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/")

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分: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()