2014-06-16 100 views
1

我在數據框中有一段POSIXlt時間,並且我正在嘗試查看每天有多少次這些事件(在這種情況下是騎自行車)。什麼是最好的方式來做到這一點?按天計算POSIXlt時間

的日期是這樣的:

> rides$start.fmtd[1:25] 
[1] "2014-01-01 00:06:00" "2014-01-01 00:11:00" "2014-01-01 00:12:00" 
[4] "2014-01-01 00:14:00" "2014-01-01 00:15:00" "2014-01-01 00:16:00" 
[7] "2014-01-01 00:16:00" "2014-01-01 00:19:00" "2014-01-01 00:20:00" 
[10] "2014-01-01 00:20:00" 

dput(head())給了我這樣的:

> dput(head(rides$start.fmtd)) 
structure(list(sec = c(0, 0, 0, 0, 0, 0), min = c(6L, 11L, 12L, 
14L, 15L, 16L), hour = c(0L, 0L, 0L, 0L, 0L, 0L), mday = c(1L, 
1L, 1L, 1L, 1L, 1L), mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(114L, 
114L, 114L, 114L, 114L, 114L), wday = c(3L, 3L, 3L, 3L, 3L, 3L 
), yday = c(0L, 0L, 0L, 0L, 0L, 0L), isdst = c(0L, 0L, 0L, 0L, 
0L, 0L)), .Names = c("sec", "min", "hour", "mday", "mon", "year", 
"wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt")) 

這個特定的幀有大約300,000慶祝活動(這是首都bikeshare數據集,其中包含在採取一切騎自行車該系統每季打包一次)。

+2

你能張貼'dput(頭(yourDataFrame))'的輸出提供數據的樣本? '表(as.Date(yourDataFrame $ posixLtVariable))'應該工作? –

+0

'表(as.date(frame $ column))'工作!但是我在框架中有大約30萬個觀察值,所以我不能'dput()'吐出合理數量的數據。 –

+0

@JakeBurkhead做出答案。 'as.Date()'可以讓我將日期保存爲表格標籤,而'frame $ yday'不會讓我輕鬆做到這一點。 –

回答

2
dates <- as.POSIXlt(runif(10, 0, 60 * 60 * 24 * 7), origin = Sys.Date()) 
dates 
## [1] "2014-06-16 03:36:13 PDT" "2014-06-15 22:39:41 PDT" 
## [3] "2014-06-19 12:25:11 PDT" "2014-06-17 09:31:45 PDT" 
## [5] "2014-06-20 02:20:00 PDT" "2014-06-18 04:36:48 PDT" 
## [7] "2014-06-19 17:33:35 PDT" "2014-06-21 15:38:24 PDT" 
## [9] "2014-06-17 08:50:45 PDT" "2014-06-20 03:36:38 PDT" 

class(dates) 
## [1] "POSIXlt" "POSIXt" 

table(as.Date(dates)) 
## 2014-06-15 2014-06-16 2014-06-17 2014-06-18 2014-06-19 2014-06-20 2014-06-21 
##   1   1   2   1   2   2   1 
+0

啊!我學到的另一件事:只有'class()',* not *'typeof()'適用於此。 'typeof()'只是說這是一個列表〜 –

1

如果你有值的日期和時間,你可以格式化他們只有日期和使用表()這些值來獲得計數。

#sample data 
set.seed(15) 
randomdates <- structure(runif(30, 1357016400, 1359608400), 
    class=c("POSIXct", "POSIXt"), tzone="") 

現在計數每日期

table(strftime(randomdates, "%Y-%m-%d")) 

值的唯一缺點,這是該表()轉動日期字符向量。您可以將它們轉換回來

tbl<-table(strftime(randomdates, "%Y-%m-%d")) 
as.POSIXct(names(tbl)) 
1

POSIXltyday屬性,你可以用這個做一個計數,使用aggregatebytable或此類。

例如,假設您有一個數據框d中的count的日期記錄的計數,並且列date。如果你的數據不會跨越超過一年的,可以使用yday獨自:

aggregate(count ~ date$yday, data=d, FUN=sum) 

如果它跨越一年以上(或只是爲了安全起見),也可以包括年份(與任何乘數大於366):

aggregate(count ~ I(1000*date$year + date$yday), data=d, FUN=sum) 
+0

但是,data.frame實際上包含POSIXlt值不是不太可能嗎? data.frame通常隱式地將它們轉換爲POSIXct。 – MrFlick

+3

沒有一個問題的例子,我不得不聽他的話。 –

+0

對不起,我添加了上述日期的示例。當我輸出它們時,我無法分辨它們是'POSIXlt'還是'POSIXct's。 –