【问题标题】:Extract date from the name of the CSV file从 CSV 文件的名称中提取日期
【发布时间】:2016-02-22 09:29:24
【问题描述】:

如何将20151001 提取为新向量中的日期(如2015-10-01),使得新向量为:

  File Name Date
  Residential_20151001_0000_1.csv 2015-10-01

【问题讨论】:

  • 你尝试了什么?为什么它不起作用?所有文件名的格式是否完全相同?
  • 拆分_,取第二个值,格式,...显示一些努力

标签: r date extract filenames


【解决方案1】:

所有解决方案都将围绕提取日期,然后将其转换为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" )

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

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

akrun 在其他答案中给出了其他选项。

【讨论】:

  • 谢谢 Tensibai... 只是一个简单的问题,如果我只需要从“Residential_20151001_0000_1.csv”中提取日期,即 0000 为 00:00 (HH:MM),如何?我试过: as.Date(sub( ".*?_(\\d{4})_.*", "\\2", file_name$FileName), "%H%M" )... 但它是错误的代码并产生了 NA。
  • 您扩展正则表达式: gsub("(\\d{8})_(\\d{4})","\\1 \\2",file_name) 并用作。 POSIXlt 获取格式为“%Y%m%d %H%M”的日期时间对象
【解决方案2】:

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

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

一个紧凑的选项是使用str_extractymd

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

更新

如果我们需要提取时间,

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

【讨论】:

  • Akrun,lubridate 的 ymd 函数在提取日期时给了我一个额外的“UTC”,这是我现在想要的。 Tensibai 使用的“子”功能对我来说非常有用。感谢两者。
  • @ManojKumar 你可以用as.Date(ymd(.. 换行就可以了。我还展示了sub 函数,你根本没有提到它..
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多