首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用date-time POSIXlt创建R data.table时出错

使用date-time POSIXlt创建R data.table时出错
EN

Stack Overflow用户
提问于 2014-02-01 02:38:58
回答 1查看 14.6K关注 0票数 23

创建包含日期-时间列的data.table时出现问题:

代码语言:javascript
复制
> 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工作!

代码语言:javascript
复制
> 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"

我是否遗漏了什么,或者是bug?如果是bug,我应该在哪里报告它?

注意,我使用的是R版本3.0.0,并且我看到了一些警告。使用版本3.0.2构建的包。这会是问题所在吗?我应该升级R本身吗?不过,我所做的其他事情似乎都在起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-01 10:35:44

来自Blue Magister的注释的格式化响应(非常感谢),出于性能原因,data.table不支持POSIXlt数据类型--请参阅建议的cast string to IDateTime作为可能的副本。

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

代码语言:javascript
复制
> 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

作为额外的说明,如果有人可以从中受益,我想从我的输入数据创建日期和时间,日期和时间在单独的字段中。我发现学习(参见? ITime )很有用,可以将时间ITime添加到date-time POSIXct中,并获得日期-时间POSIXct,如下所示:

代码语言:javascript
复制
> 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" 
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21487614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档