我在数据框中有一大块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数据集,其中包含系统中每次骑行,每季度打包)。
答案 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
属性,您可以使用此属性进行统计,使用aggregate
或by
或table
等。
例如,假设您在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}}