创建带有日期时间POSIXlt的R data.table时出错
创建带有日期时间列的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
> 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"