从CSV文件的名称中提取日期

Man*_*mar -5 filenames r date extract

如何在新向量中提取20151001日期(如2015-10-01),以便新向量为:

  File Name Date
  Residential_20151001_0000_1.csv 2015-10-01
Run Code Online (Sandbox Code Playgroud)

Ten*_*bai 6

所有解决方案都将围绕提取日期,然后将其转换as.Date(,"%Y%m%d")为告诉它的格式.

sub用于提取日期的第一个选项:

file_name <- "Residential_20151001_0000_1.csv"
file_date <- as.Date(sub( ".*?_(\\d{8})_.*", "\\1", file_name), "%Y%m%d" )
Run Code Online (Sandbox Code Playgroud)

strsplit作为您的文件名的第二个选项似乎用下划线分隔:

file_date <- as.Date(strsplit(file_name,"_")[[1]][2], "%Y%m%d")
Run Code Online (Sandbox Code Playgroud)

akrun在另一个答案中给出了其他选择.


akr*_*run 5

我们可以使用sub匹配一个或多个非_后跟的字符-,捕获数字部分((\\d+))后跟字符,直到字符串结尾.在替换中,我们使用反向引用(\\1).字符串被提取后,我们可以转换为Date类,并as.Date指定format.

as.Date(sub('[^_]+_(\\d+).*', '\\1', df1[,1]), "%Y%m%d")
#[1] "2015-10-01"
Run Code Online (Sandbox Code Playgroud)

紧凑的办法是使用str_extractymd

library(stringr)
library(lubridate)
ymd(str_extract(df1[,1], '\\d+'))
#[1] "2015-10-01 UTC"
Run Code Online (Sandbox Code Playgroud)

更新

如果我们需要提取时间,

t1 <- sub('^[^_]+_[^_]+_(\\d{2})(\\d{2})_.*', '\\1:\\2', df1[,1])
t1
#[1] "00:00"
strptime(t1, format='%H:%M')
Run Code Online (Sandbox Code Playgroud)