【问题标题】:ddply summarize data hourlyddply 每小时汇总数据
【发布时间】:2018-03-30 04:39:12
【问题描述】:

我想以每小时和每两小时总结一次数据集的频率。时间列的格式为 hh:mm:ss。
下面的代码正在每月汇总数据,但我没有找到每小时或每两小时的任何类似代码。 提前致谢。

data2$StartDate <- as.Date(data2$StartDate, "%m/%d/%Y") data4 <- ddply(data2, .(format(StartDate, "%m")), summarize, freq=length(StartDate))

数据集是这样的:

    TripId  StartDate   StartTime
 <int>     <date> <S3: times>
1 15335543 2016-01-01    00:14:00
2 15335544 2016-01-01    00:14:00
3 15335607 2016-01-01    02:00:00
4 15335608 2016-01-01    02:01:00
5 15335613 2016-01-01    02:16:00
6 15335639 2016-01-01    02:50:00

【问题讨论】:

  • @Tung 数据如下: TripId StartDate StartTime 15335543 1/1/2016 12:14:00 AM 15335544 1/1/2016 12:14:00 AM 15335607 1/1/2016 2: 00:00 AM 15335608 1/1/2016 2:01:00 AM 15335613 1/1/2016 2:16:00 AM 15335639 1/1/2016 2:50:00 AM 15335651 1/1/2016 3:08: 00 AM 15335962 1/1/2016 8:08:00 AM 15336135 1/1/2016 9:34:00 AM 15336141 1/1/2016 9:37:00 AM 15336164 1/1/2016 9:46:00 AM 15336247 2016 年 1 月 1 日上午 10:18:00 15336283 2016 年 1 月 1 日上午 10:39:00 15336330 2016 年 1 月 1 日上午 10:59:00 15336333 2016 年 1 月 1 日上午 11:00:00 15336338 1 /1/2016 11:04:00 AM 15336362 1/1/2016 11:17:00 AM
  • @SadVaseb,你能编辑你的帖子并包含这个数据集吗?
  • @hpesoj626 我添加数据集
  • @SadVaseb 数据没有任何价值。

标签: r plyr summarization


【解决方案1】:

如果我理解正确,那么

每小时频率:

library(dplyr)

df %>%
  mutate(start_timestamp = as.POSIXct(paste(df$StartDate, df$StartTime), tz="UTC", format="%Y-%m-%d %H")) %>%
  right_join(data.frame(seq_h = as.POSIXct(unlist(lapply(unique(df$StartDate), 
                                                         function(x) seq(from=as.POSIXct(paste(x, "00:00:00"), tz="UTC"),
                                                                         to=as.POSIXct(paste(x, "23:00:00"), tz="UTC"),
                                                                         by="hour"))), origin="1970-01-01", tz="UTC")), by=c("start_timestamp" = "seq_h")) %>%
  group_by(start_timestamp) %>%
  summarise(freq=sum(!is.na(TripId)))

输出是:

   start_timestamp      freq
 1 2016-01-01 00:00:00     2
 2 2016-01-01 01:00:00     1
 3 2016-01-01 02:00:00     1
 4 2016-01-01 03:00:00     0
 5 2016-01-01 04:00:00     0
...

两小时一班:

library(dplyr)

df %>%
  mutate(start_timestamp = as.POSIXct(cut(as.POSIXct(paste(df$StartDate, df$StartTime), tz="UTC"), breaks="2 hours"), tz="UTC")) %>%
  right_join(data.frame(seq_h = as.POSIXct(unlist(lapply(unique(df$StartDate), 
                                                         function(x) seq(from=as.POSIXct(paste(x, "00:00:00"), tz="UTC"),
                                                                         to=as.POSIXct(paste(x, "23:00:00"), tz="UTC"),
                                                                         by="2 hours"))), origin="1970-01-01", tz="UTC")), by=c("start_timestamp" = "seq_h")) %>%
  group_by(start_timestamp) %>%
  summarise(freq=sum(!is.na(TripId)))

输出是:

   start_timestamp      freq
 1 2016-01-01 00:00:00     3
 2 2016-01-01 02:00:00     1
 3 2016-01-01 04:00:00     0
 4 2016-01-01 06:00:00     0
 5 2016-01-01 08:00:00     0
...

样本数据:

df <- structure(list(TripId = c(15335543L, 15335544L, 15335607L, 15335608L, 
15335613L, 15335639L), StartDate = c("2016-01-01", "2016-01-01", 
"2016-01-01", "2016-01-01", "2016-01-02", "2016-01-02"), StartTime = c("00:14:00", 
"00:14:00", "01:00:00", "02:01:00", "02:16:00", "02:50:00")), .Names = c("TripId", 
"StartDate", "StartTime"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多