白天计算POSIXlt次数

时间:2014-06-16 02:22:31

标签: r date 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数据集,其中包含系统中每次骑行,每季度打包)。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您有日期和时间的值,您可以将它们格式化为只有日期并在这些值上使用table()来获取计数。

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

现在计算每个日期的值

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

唯一的缺点是table()将日期转换为字符向量。您可以使用

将其转换回来
tbl<-table(strftime(randomdates, "%Y-%m-%d"))
as.POSIXct(names(tbl))

答案 2 :(得分:1)

POSIXlt具有yday属性,您可以使用此属性进行统计,使用aggregatebytable等。

例如,假设您在count的数据框d中列出了date列,其中列yday。如果您的数据不超过一年,则可以单独使用aggregate(count ~ date$yday, data=d, FUN=sum)

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

如果它超过一年(或只是为了安全),您还可以包括年份(任何乘数大于366):

{{1}}