将多个数据框的单独列(year,dayOfYear,Hour,Min,Sec)转换为R中的日期对象/时间戳

时间:2013-03-05 15:56:03

标签: r date dataframe

首先,我要说我一直想发布Dates and Times in separate columns, convert to datetime in 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格式字段句柄中,正如post bellow指出的正确答案所指出的那样。我需要使用%j而不是%D,这足以获得一个日期时间列。我更正了绕过它们的秒数,因为POSIXlt似乎只使用整数秒:

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

谢谢大家!

1 个答案:

答案 0 :(得分: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:这里所有日期都是同一天