【问题标题】:For an hourly data, Getting maximum value for each day对于每小时数据,获取每天的最大值
【发布时间】:2016-09-10 15:05:35
【问题描述】:

让我有以下数据:

time <- seq(ISOdate(2007,7,1,0), ISOdate(2008,4,5,23), by = "1 hour")
y <- rnorm(n = length(time))

year  <- as.numeric(substr((as.character(time)), 1, 4))  # year number as numeric

month <- as.numeric(substr((as.character(time)), 6, 7))  # month number as numeric

day <- as.numeric(substr((as.character(time)), 9, 10))  # day number as numeric

hour <- as.numeric(substr((as.character(time)), 12, 13))  # hour number as numeric

dat <- data.frame(year=year, month=month, day=day, hour=hour, y = y)

对于每一天,每小时有 24 个y 值(0 到 23)。现在我必须每天找到最多y。也就是说,对于日期“2007-10-05”,每小时(0 到 23)获得 24 个y 值,我必须获得“2007-10-05”这一天的最大值。因此,由于“2007-07-01”到“2008-04-05”之间有 279 天,我将获得最大 279 个 y 值。

我该怎么做?

【问题讨论】:

    标签: r


    【解决方案1】:

    直接对时间和y数组应用cut命令:

    tapply(y, INDEX =cut(time, breaks="day"), max)
    

    或使用 dplyr 库:

    library(dplyr)
    df<-data.frame(time, y)
    summarize(group_by(df, cut(df$time, breaks="day")), max(y))
    

    【讨论】:

      【解决方案2】:

      使用sqldf

      library(sqldf)
      sqldf("select year, month, day, 
             max(y) as y 
             from dat 
             group by year, month, day") 
      

      或者另一种选择是订购“y”并选择第一个值

      library(data.table)
      setDT(dat)[order(-y), .(y= y[1L]), by = .(year, month, day)]
      

      dplyr

      library(dplyr)
      dat %>%
          group_by(year, month, day) %>%
          arrange(desc(y)) %>%
          summarise(y = first(y))  
      

      【讨论】:

        【解决方案3】:

        使用dplyr

        library(dplyr)
        dyp1 <- dat %>% 
                group_by(year, month, day) %>% 
                summarise(y=max(y))
        

        使用data.table

        library(data.table)
        setDT(dat)[, .(y=max(y)), by = .(year, month, day)]
        

        使用基础R

        aggregate( y ~ year+month+day, dat, max)
        

        【讨论】:

          猜你喜欢
          • 2021-01-17
          • 2019-08-13
          • 2019-05-18
          • 1970-01-01
          • 2017-03-22
          • 2021-04-17
          • 1970-01-01
          • 1970-01-01
          • 2020-08-22
          相关资源
          最近更新 更多