使用R中的Regex获取日期

时间:2017-09-12 20:12:21

标签: r regex date datetime

我有各种文件名,如下所示:     文件< - " /path/path/path/pth.0p25.2015011500.p264.path2.pathpathh254004.nc"

问题1 : 我想从上面的文件中的datetime部分(2015011500)。我写了下面的代码:

# Fetching the date vlaue from the filename
a<-substr(gsub("[A-z]|[////]","",file),6,13)
 a
[1] "20150115"
hrs<-substr(gsub("[A-z]|[////]","",file),14,15)
hrs
[1] "00"
#concatenating both date and a as one
chr<-paste(a,hrs, sep=" ")
chr
[1] "20150115 00"

但是当我试图将chr转换为日期时。我得到NULL值。

#Converting chr variable to date
datetime<-as.Date(a,format="%Y%m%d %H")

Result:
datetime
[1] NA

问题2 : 我想从文件名中获取264。代码如下:

validhrs<-substr(gsub("[A-z]|[////]","",ncfname),17,19)
Result:
validhrs
[1] "264"

我想将此有效时间转换为时间(小时)。然后将其添加到日期时间

有人可以帮我这个吗?

提前致谢!!

1 个答案:

答案 0 :(得分:1)

回答问题1:如何从字符串中提取日期,然后将其转换为日期类:

x <- "/path/path/path/pth.0p25.2015011501.p264.path2.pathpathh254004.nc"

#Extract the date:
x <- gsub(".*(\\d{10}).*",'\\1',x)

#Convert to POSIXct:
x <- as.POSIXct(x,format="%Y%m%d %H")

输出:

[1] "2015-01-15 01:00:00 PST"

回答问题2:如何增加小时数,&#34; ... p264 ...&#34;在这种情况下,到x:

hrs <- gsub(".*[p]+(\\d{3}).*","\\1",x)

require(lubridate)

x + hours(hrs)

输出:

[1] "2015-01-26 01:00:00 PST"

注意:264小时(即11天)被添加到曾经的时间&#34; 2015-01-15 01:00:00&#34;。