使用日期时间 POSIXlt 创建 R data.table 时出错 [英] Error creating R data.table with date-time POSIXlt
问题描述
使用日期时间列创建 data.table 的问题:
Problem creating data.table with date-time column:
> mdt <- data.table(id=1:3, d=strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S"))
> class(mdt)
[1] "data.table" "data.frame"
> print(mdt)
Error in `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE), :
length of 'dimnames' [1] not equal to array extent
Enter a frame number, or 0 to exit
1: print(list(id = 1:3, d = list(sec = c(36, 48, 12), min = c(2, 2, 3), hour = c(6, 6, 7), mday = c(31,
2: print.data.table(list(id = 1:3, d = list(sec = c(36, 48, 12), min = c(2, 2, 3), hour = c(6, 6, 7), m
3: `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE), ":", sep = ""))
创建为 data.frame 并转换为 data.table 工作!
Create as data.frame and convert to data.table works!
> mdf <- data.frame(id=1:3, d=strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S"))
> print(mdf)
id d
1 1 2014-01-31 06:02:36
2 2 2014-01-31 06:02:48
3 3 2014-01-31 07:03:12
> mdt <- as.data.table(mdf)
> print(mdt)
id d
1: 1 2014-01-31 06:02:36
2: 2 2014-01-31 06:02:48
3: 3 2014-01-31 07:03:12
> class(mdt)
[1] "data.table" "data.frame"
我错过了什么还是错误?如果是错误,我应该在哪里报告?
Am I missing anything or is it bug? If a bug, where do I report it?
注意我使用的是 R 版本 3.0.0,我看到了一些警告.使用 3.0.2 版构建的软件包.这可能是问题吗?我应该升级 R 本身吗?不过,我所做的其他一切似乎都在起作用.
Note I use R version 3.0.0 and I see some warnings re. packages built with version 3.0.2. Can it be the problem? Should I upgrade R itself? Everything else I do seems to be working though.
推荐答案
来自 Blue Magister 评论的格式化响应(非常感谢),data.table 出于性能原因不支持 POSIXlt 数据类型 -- 参见 将字符串转换为 IDateTime 建议尽可能重复.
Formatting response from Blue Magister's comment (thanks so much), data.table does not support POSIXlt data types for performance reason -- see cast string to IDateTime as suggested as possible duplicate.
因此,要走的路是将时间转换为 ITime(由 data.table 提供的类型)或将日期时间(或仅日期)转换为 POSIXct,具体取决于日期信息是否重要:
So the way to go is to cast time as ITime (type provided by data.table) or date-time (or date only) as POSIXct, depending upon whether date info is important or not:
> mdt <- data.table(id=1:3, d=as.ITime(strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S")))
> print(mdt)
id d
1: 1 06:02:36
2: 2 06:02:48
3: 3 07:03:12
> mdt <- data.table(id=1:3, d=as.POSIXct(strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S")))
> print(mdt)
id d
1: 1 2014-01-31 06:02:36
2: 2 2014-01-31 06:02:48
3: 3 2014-01-31 07:03:12
作为一个额外说明,以防有人可以从中受益,我想创建 date &从我的输入数据中获取日期和时间时间在不同的领域.我发现学习(参见?ITime)可以将时间 ITime 添加到日期时间 POSIXct 并获得日期时间 POSIXct 很有用,如下所示:
As an extra note in case someone can benefit from it, I wanted to create date & time from my input data with date & time in separate fields. I found it useful to learn (see ?ITime) that one can add time ITime to date-time POSIXct and get a date-time POSIXct as follows:
> mdt <- as.POSIXct("2014-01-31") + as.ITime("06:02:36")
> print(mdt)
[1] "2014-01-31 06:02:36 EST"
> class(mdt)
[1] "POSIXct" "POSIXt"
这篇关于使用日期时间 POSIXlt 创建 R data.table 时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!