【问题标题】:Fetch date time part from filename in R从R中的文件名中获取日期时间部分
【发布时间】:2017-09-12 14:43:22
【问题描述】:

我想从文件名中获取日期和时间部分,如下所示:

filename<-"/abc/def/ghi/jk.0m25.2015011500.f264.path2.pathd254004.nc"

我尝试了以下代码来获取所需的部分:

 dt<- sub('^[^.]+.(\\d+)+[\\w\\d].*','\\1',filename)#Not working

这里的日期和时间部分是日期:20150115 时间:00

dtm <- strptime(c("2015-01-15 00:00:00"), format = "%Y-%m-%d %H", tz = "EST")

然后我想将小时数(文件名中的 264 (/.f264.path2.))添加到 dtm 对象。

final_dt<- dtm+264(hrs)

final_dt 包含日期和时间。

获得 final_dt 的值后,我想将其作为列添加到数据框中,如下所示:

# Creating dataframe 
long<-c(106.61291,-81.97224,-84.4277,-97.66631,-72.68604)
lat<-c(35.04333,33.37378,33.64073,30.19743,41.93887)
xy <- data.frame(long, lat)

#Desired Output
  actual_date time Final_date time     long      lat
1 2015-01-15  00   2015-01-26 ...        106.61291 35.04333
2 2015-01-15  00   2015-01-26 ...        -81.97224 33.37378
3 2015-01-15  00   2015-01-26 ...         -84.42770 33.64073
4 2015-01-15  00   2015-01-26 ...          -97.66631 30.19743
5 2015-01-15  00   2015-01-26 ...          -72.68604 41.93887

【问题讨论】:

    标签: r regex filenames gsub


    【解决方案1】:

    我会尽力澄清这一点,但首先让我说你的问题不清楚,

    dt<- sub('^[^.]+.(\\d+)+[\\w\\d].*','\\1',filename)#Not working
    

    您似乎在寻求解决该部分的问题?

    假设日期时间是您文件名中唯一可以出现在一行中的 10 位数字序列,您可以使用以下正则表达式

    "\.\d{10}\."
    

    然后使用 substring 函数将子字符串(YYYY、MM、DD、TT)解析为日期时间。并将其传递给您的 strptime 方法。

    final_dt<- dtm+264(hrs)
    

    对于时间间隔的增加/增加,strptime 似乎接受整数作为 ,因此您可以尝试

    final_dt<- dtm + (264*60*60)
    

    其中 60*60 是 60 分钟/小时 * 60 秒/分钟的单位转换。

    xy <- data.frame(long, lat)
    

    如果你有一个向量中的所有 dtm,你可以在创建 xy 时使用它们,例如:

    xy  <- data.frame(dtm_vector, long, lat)
    

    (p.s. 您应该尝试在您的问题中添加更多标签,例如“正则表达式”,因为这是这种情况下的最大障碍)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多