如何在新的向量中提取20151001
作为日期(如2015-10-01
),以便新向量为:
File Name Date
Residential_20151001_0000_1.csv 2015-10-01
答案 0 :(得分: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" )
strsplit
作为文件名的第二个选项似乎用下划线分隔:
file_date <- as.Date(strsplit(file_name,"_")[[1]][2], "%Y%m%d")
akrun在另一个答案中给出了其他选择。
答案 1 :(得分:5)
我们可以使用sub
,匹配一个或多个不是_
后跟-
的字符,捕获数字部分((\\d+)
),后跟字符,直到字符串的结尾。在替换中,我们使用反向引用(\\1
)。提取字符串后,我们可以转换为Date
类,as.Date
指定format
。
as.Date(sub('[^_]+_(\\d+).*', '\\1', df1[,1]), "%Y%m%d")
#[1] "2015-10-01"
紧凑型选项将str_extract
与ymd
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')