data.table函数可以实时处理日期和时间列吗?

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使用的日期和地方操作和这些日期的类别是否在飞行中做护身符。

+1

德文的答案是正确的:改变'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)。 –

这使用help(IDateTime)页面中的示例之一。它表明你可以改变语法来对by=这个字符值的格式“=”或者(在@Matthew Dowle的评论之后),你可以尝试使用你正在使用的函数形式(虽然我还没有能力我确实得到了首选表单:by=list(wday=wday(idate)))。注意,由于没有idateitime变量,因此创建密钥时需要使用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 
+2

'IDateTime'是要走的路,是的,但'by'的字符形式是红色的鲱鱼。如果列类是'IDateTime',Farrel的语法就可以正常工作;例如只是'by = year(idate)'或'by = wday(idate)'。 “by”的字符形式是作为遗留选项的。 'by = list(wday = wday(idate))'现在是命名'by'列(和多个'by'列)的首选方式。将更新文档重新这些例子,谢谢... –

+0

叶。这些引号(引号)解决了这个问题。在我所有的研究中,我都有很多日期字段。我的大多数脚本都会读取它们并将它们转换为POSIXct。然后,他们成为我不时使用的几个数据框的一部分。这是否意味着当我想使用data.tables我应该将所有日期列转换为IDate? – Farrel