使用日期时间 POSIXlt 创建 R data.table 时出错 [英] Error creating R data.table with date-time POSIXlt

查看:10
本文介绍了使用日期时间 POSIXlt 创建 R data.table 时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用日期时间列创建 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆