从R中的文件名中获取日期时间部分

时间:2017-09-12 14:43:22

标签: r regex filenames gsub

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

val result = df.withColumn("Race", dropNulls(array(
  df.columns.map(name => when(col(name) === 1, name)): _*
)))

result.show(false)
// +-------+-------------+-------+---------------------------------+
// |R_White|R_Af_American|R_Asian|Race                             |
// +-------+-------------+-------+---------------------------------+
// |1      |1            |1      |[R_White, R_Af_American, R_Asian]|
// |0      |1            |1      |[R_Af_American, R_Asian]         |
// |1      |0            |1      |[R_White, R_Asian]               |
// |0      |1            |0      |[R_Af_American]                  |
// +-------+-------------+-------+---------------------------------+

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

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

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

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

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

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

final_dt包含日期和时间。

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

final_dt<- dtm+264(hrs)

1 个答案:

答案 0 :(得分:2)

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

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

您似乎要求解决该部分?

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

"\.\d{10}\."

然后使用子字符串函数将子字符串(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。您应该尝试在问题中添加更多标签,例如&#39; regex&#39;,因为这是此方案中的最大障碍)