2011-11-22 49 views
2

我已經開始使用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)。 –

回答

3

這使用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