我想从文件名中获取日期和时间部分,如下所示:
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)
答案 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;,因为这是此方案中的最大障碍)