1

首先,让我说我一直希望在单独的列中发布日期和时间,在 R 中转换为日期时间,但它不适用于这种情况。

我有一个包含多个测量值的 CSV 文件,从第 1 列到第 5 列,我有以下形式的数据戳:Year、DayOfYear、Hour、Minute、Second。类似这样的 var 名称dat

  Year Day Hour Min  Sec. E1.S1 E1.S2 E1.S3 E1.S4 E1.S5 E1.S6 E1.S7 E1.S8 E2.S1 E2.S2 E2.S3 E2.S4 E2.S5
1 2003 241    0   1  5.87 0.296 0.394 0.657 0.427 0.362 0.559 0.460 0.460 0.526 0.362 0.362 0.493 0.460
2 2003 241    0   5 18.52 0.486 0.543 0.572 0.629 0.372 0.457 0.429 0.829 0.486 0.400 0.286 0.543 0.457
3 2003 241    0  10 10.65 0.514 0.629 0.371 0.657 0.457 0.657 0.429 0.429 0.314 0.400 0.286 0.286 0.343
4 2003 241    0  15  2.76 0.575 0.301 0.411 0.630 0.274 0.466 0.466 0.548 0.438 0.329 0.438 0.493 0.301
5 2003 241    0  20  7.06 0.329 0.274 0.657 0.329 0.521 0.247 0.356 0.246 0.411 0.356 0.438 0.520 0.356
6 2003 241    0  25 11.35 0.486 0.314 0.343 0.372 0.314 0.343 0.457 0.343 0.257 0.343 0.229 0.543 0.372

我需要的是在一个时间戳字段中“加入”所有这 5 个日期字段,以便我可以正确绘制数据并在 R 中使用它。

我查看了ISOdatetime函数,但我无法让它工作(而且它似乎没有 dayOfYear 字段)。我还查看了POSIXlt并尝试了类似的方法:

test = within(dat, datetime <- as.POSIXlt(paste(Year, Day, Hour, Min, Sec.),
                                          format = "%Y %D %H %M %S"))

但我得到的只是一个空的日期时间字段附加到我的数据框。

有任何想法吗?

编辑:

问题出在 dayOfYear 格式字段句柄中,正如下面帖子中指出的正确答案。我需要使用 %j 而不是 %D ,这足以获得日期时间的列。由于 POSIXlt 似乎只使用整数秒,我更正了秒数:

teste = within(dat, datetime <- as.POSIXlt(paste(Year, Day, Hour, Min, round(Sec.)),
                                          format = "%Y %j %H %M %S"))

谢谢你们!

4

1 回答 1

1

这里是使用strptime格式 %j 的解决方案:作为十进制数 (001–366) 的年份。

我假设 dat,是你的 data.frame,首先我粘贴日期列

dat$date <- paste(paste(dat$Year,dat$Day,sep='/'),paste(dat$Hour,dat$Min,dat$Sec,sep=':'))

然后我申请strptime

dat$date <- strptime(dat$date,format ='%Y/%j %H:%M:%S')

dat$date
[1] "2003-08-29 00:01:05" "2003-08-29 00:05:18" "2003-08-29 00:10:10" "2003-08-29 00:15:02" "2003-08-29 00:20:07" "2003-08-29 00:25:11"

PS:这里所有的日期都是同一天

于 2013-03-05T16:21:12.193 回答