【问题标题】:Group Dataframe hourly in RR中每小时分组数据框
【发布时间】:2013-07-03 11:00:55
【问题描述】:

我有一个数据框,它在日期列中包含 DateTime 值,在三列中包含每个日期时间的计数。

我正在尝试使用三列的计数每小时对数据进行分组

聚合函数适用于单列,但我试图对整个数据框执行此操作。有什么建议吗?

aggregate(DateFreq$ColA,by=list((substr(DateFreq$Date,1,13))),sum) 

【问题讨论】:

  • 您应该提供一个可重现的数据示例。这里的人应该只是复制并粘贴您的代码并重现它。
  • 对不起,我会记住的。

标签: r statistics dataframe


【解决方案1】:

您可以使用aggregate 中的formula。但是你应该在之前正确地创建一个hour 变量。

dat$hour <- as.POSIXlt(dat$Date)$hour
aggregate(.~hour,data=dat,sum)

这里是一个例子:

Lines <- "Date,c1,c2,c3
06/25/2013 12:01,0,1,1
06/25/2013 12:08,-1,1,1
06/25/2013 12:48,0,1,1
06/25/2013 12:58,0,1,1
06/25/2013 13:01,0,1,1
06/25/2013 13:08,0,1,1
06/25/2013 13:48,0,1,1
06/25/2013 13:58,0,1,1
06/25/2013 14:01,0,1,1
06/25/2013 14:08,0,1,1
06/25/2013 14:48,0,1,1
06/25/2013 14:58,0,1,1"

library(zoo)  ## better to read/manipulate time series
z <- read.zoo(text = Lines, header = TRUE, sep = ",",
              index=0:1,tz='',
              format = "%m/%d/%Y %H:%M")


dat <- data.frame(Date = index(z),coredata(z))
dat$hour <- as.POSIXlt(dat$Date)$hour
aggregate(.~hour,data=dat,sum)

hour       Date c1 c2 c3
1   12 5488624500 -1  4  4
2   13 5488638900  0  4  4
3   14 5488653300  0  4  4

【讨论】:

  • 这行得通!但它仅按小时汇总。是否也可以按天和小时进行汇总?
【解决方案2】:

您可以使用dplyrdplyr::group_bydplyr::summarise 进行聚合:

library(lubridate)
library(anytime)
library(tidyverse)

Lines <- "Date,c1,c2,c3
06/25/2013 12:01,0,1,1
06/25/2013 12:08,-1,1,1
06/25/2013 12:48,0,1,1
06/25/2013 12:58,0,1,1
06/25/2013 13:01,0,1,1
06/25/2013 13:08,0,1,1
06/25/2013 13:48,0,1,1
06/25/2013 13:58,0,1,1
06/25/2013 14:01,0,1,1
06/25/2013 14:08,0,1,1
06/25/2013 14:48,0,1,1
06/25/2013 14:58,0,1,1"

setClass("myDate")
setAs("character","myDate", function(from) anytime(from))
df <- read.csv(text = Lines, header=TRUE,  colClasses = c("myDate", "numeric", "numeric", "numeric"))

df %>%
  group_by(Date=floor_date(Date, "1 hour")) %>%
  summarize(c1=sum(c1), c2=sum(c2), c3=sum(c3))
# A tibble: 3 × 4
                 Date    c1    c2    c3
               <dttm> <dbl> <dbl> <dbl>
1 2013-06-25 12:00:00    -1     4     4
2 2013-06-25 13:00:00     0     4     4
3 2013-06-25 14:00:00     0     4     4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多