创建包含日期-时间列的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 = ""))创建为data.frame并转换为data.table工作!
> 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本身吗?不过,我所做的其他事情似乎都在起作用。
发布于 2014-02-01 10:35:44
来自Blue Magister的注释的格式化响应(非常感谢),出于性能原因,data.table不支持POSIXlt数据类型--请参阅建议的cast string to IDateTime作为可能的副本。
因此,方法是将时间转换为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作为额外的说明,如果有人可以从中受益,我想从我的输入数据创建日期和时间,日期和时间在单独的字段中。我发现学习(参见? ITime )很有用,可以将时间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" https://stackoverflow.com/questions/21487614
复制相似问题