创建带有日期时间POSIXlt的R data.table时出错

创建带有日期时间POSIXlt的R data.table时出错,r,data.table,R,Data.table,创建带有日期时间列的data.table时出现问题: > 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

创建带有日期时间列的data.table时出现问题:

> 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 = ""))
>mdt类(mdt)
[1] data.table“data.frame”
>打印(mdt)
“行名称mdt打印(mdt)”中出错
身份证
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)
[1] data.table“data.frame”
我是不是遗漏了什么或者是虫子?如果有bug,我应该在哪里报告它


注意:我使用的是R版本3.0.0,我看到一些警告。使用版本3.0.2构建的包。这可能是问题所在吗?我应该升级R本身吗?不过,我所做的其他一切似乎都能正常工作。

Blue Magister评论中的格式化响应(非常感谢),出于性能原因,data.table不支持POSIXlt数据类型--请参阅尽可能重复的建议

因此,方法是将时间转换为ITime(data.table提供的类型),或将日期时间(或仅日期)转换为POSIXct,具体取决于日期信息是否重要:

> 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
>mdt打印(mdt)
身份证
1:  1 06:02:36
2:  2 06:02:48
3:  3 07:03:12
>mdt打印(mdt)
身份证
1:  1 2014-01-31 06:02:36
2:  2 2014-01-31 06:02:48
3:  3 2014-01-31 07:03:12
作为一个额外的注意事项,如果有人可以从中受益,我想从我的输入数据中创建日期和时间,并在单独的字段中使用日期和时间。 我发现学习(参见?ITime)可以将time ITime添加到date time POSIXct并获得如下日期时间POSIXct非常有用:

> 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" 
>mdt打印(mdt)
[1] “2014-01-31 06:02:36美国东部时间”
>类别(mdt)
[1] POSIXct“POSIXt”

由于尺寸和结构原因,的可能副本不支持
POSIXlt
。改用
POSIXct
ITime
。将R升级到最新版本-通常会使您的生活更轻松。
POSIXct
是一种日期时间格式,而不仅仅是日期:
as.POSIXct(“2014-01-31 06:02:36”)
> 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"