如何从列表中的文件名转换为数据?

时间:2017-08-30 21:45:50

标签: r dplyr apply lapply lubridate

我有一个文件名列表dat

 [1] "d_t_2016-12-11-00_H1.nc"
 [2] "d_t_2016-12-12-00_H1.nc"
 [3] "d_t_2016-12-13-00_H1.nc"

我可以使用以下(lubridate库)

来提取时间
fdate <- as.Date(strsplit(dat[1], "_")[[1]][3], "%Y-%m-%d")

但是如何使用lapply执行此操作?对其他解决方案也持开放态度。

lapply(dat, function(x) as.Date(strsplit(x, "_")[[1]][3], "%Y-%m-%d"))

目前,我获得了NULL个值

2 个答案:

答案 0 :(得分:2)

使用lapply

dat <- c("d_t_2016-12-11-00_H1.nc", "d_t_2016-12-12-00_H1.nc", "d_t_2016-12-13-00_H1.nc")

lapply(strsplit(dat, "_"), function(x) as.Date(x[3], '%Y-%m-%d-%H'))

#[[1]]
#[1] "2016-12-11"

#[[2]]
#[1] "2016-12-12"

#[[3]]
#[1] "2016-12-13"

您还可以使用data.table::tstrsplit

as.Date(tstrsplit(dat, "_")[[3]], '%Y-%m-%d-%H')
# [1] "2016-12-11" "2016-12-12" "2016-12-13"

答案 1 :(得分:1)

另一个stringr的解决方案:

library(stringr)
as.Date(str_extract(dat, "\\d{4}-\\d{2}-\\d{2}"), "%Y-%m-%d")

但是,您原来的lapply似乎适用于您发布的列表条目;是否有可能某些文件的格式不同?