我有一个文件名列表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
个值
答案 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似乎适用于您发布的列表条目;是否有可能某些文件的格式不同?