data.table函数可以实时处理日期和时间列吗?
我已经开始使用data.table。事实上,它是非常快速和相当好的语法。我在日期上遇到麻烦。我喜欢用lubridate。在我的许多数据集中,我有日期或日期和时间,并使用lubridate来操纵它们。 Lubridate将该瞬间存储为POSIX类。我在这里看到了答案,例如创建新的变量来获得例如。我不喜欢那样。有时候我会按季度分析其他时间,按季度分析其他时间,其他时间按月分析,其他时间按持续时间分析。我想简单做一下像这样data.table函数可以实时处理日期和时间列吗?
mydatatable[,length(medical.record.number),by=year(date.of.service)]
,应该给我病人遭遇的数量在某一年。 by函数不起作用。
Error in names(byval) = as.character(bysuborig) :
'names' attribute [2] must be the same length as the vector [1]
能否请你点我到data.tables使用的日期和地方操作和这些日期的类别是否在飞行中做护身符。
这使用help(IDateTime)
页面中的示例之一。它表明你可以改变语法来对by=
这个字符值的格式“=”或者(在@Matthew Dowle的评论之后),你可以尝试使用你正在使用的函数形式(虽然我还没有能力我确实得到了首选表单:by=list(wday=wday(idate))
)。注意,由于没有idate
或itime
变量,因此创建密钥时需要使用IDateTime类。那些是属性的类
datetime <- seq(as.POSIXct("2001-01-01"), as.POSIXct("2001-01-03"), by = "5 hour")
(af <- data.table(IDateTime(datetime), a = rep(1:2, 5), key = "a,idate,itime"))
af[, length(a), by = "wday = wday(idate)"]
wday V1
[1,] 2 4
[2,] 3 5
[3,] 4 1
'IDateTime'是要走的路,是的,但'by'的字符形式是红色的鲱鱼。如果列类是'IDateTime',Farrel的语法就可以正常工作;例如只是'by = year(idate)'或'by = wday(idate)'。 “by”的字符形式是作为遗留选项的。 'by = list(wday = wday(idate))'现在是命名'by'列(和多个'by'列)的首选方式。将更新文档重新这些例子,谢谢... –
叶。这些引号(引号)解决了这个问题。在我所有的研究中,我都有很多日期字段。我的大多数脚本都会读取它们并将它们转换为POSIXct。然后,他们成为我不时使用的几个数据框的一部分。这是否意味着当我想使用data.tables我应该将所有日期列转换为IDate? – Farrel
德文的答案是正确的:改变'date.of.service'为'IDateTime'。将着眼于改善那种神秘的错误信息,以便将来直接在错误信息中给出建议(或者只是让它适用于POSIXct)。新增了[FR#1668](https://r-forge.r-project.org/tracker/index.php?func=detail&aid=1668&group_id=240&atid=978)。 –