如何分别计算不同站点数据字段的平均值

How to calculate average of data fields of different stations separately

我正在尝试根据 HOUR 平均下雨。数据包括 1000 多个站点 24 小时记录的降雨量。每个 HOUR 有 4 个记录,但在某处会变化为 1、2 或 3。我必须为每个 STATION 计算每个 HOUR 的平均 RAIN。示例数据如下:

STN,     HOBLINAME,   LATI,      LONG_,    RAINDATE, HOUR,  RAIN
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  0,    3.5
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  0,    3
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  0,    3
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  0,    2.5
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  1,    0
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  1,    1
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  1,    2
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  2,    0
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  2,    0
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  2,    0
4471,   Adagal (GP), 15.952089, 75.673282, 14-08-17,  2,    0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  0,   7.5
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  1,   7
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  1,   6.5
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  2,   6
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  2,   6
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  2,   5.5
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  2,   5
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  21,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  21,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  21,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  21,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  22,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  22,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  22,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  22,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  23,   0
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  23,   2
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  23,   2.5
804,    BADAMI,      15.919473, 75.683335, 14-08-17,  23,   3

我试过:

copy14   <- read.csv("/home/14copy.csv")
aggregate( RAIN ~ HOUR, copy14, FUN = mean )

但它并没有给出所有站点的所有特定小时的平均值(比如所有站点的 0 小时一起平均)。我想要的是每个站点每小时的平均值,即这里对于站点 4471 RAIN 必须单独平均,对于站点 804 必须单独平均。最后我应该如何写这个最终平均值及其所有相关字段。

使用 dplyr 库我们简单地分组和总结如下:

library(dplyr)
copy14 <- read.csv("rain.csv")
copy14 %>%
group_by(HOUR, STN) %>%
summarise(RAIN = mean(RAIN))

使用data.table:

require(data.table); setDT(copy14)

copy14[, .(MeanRain = mean(RAIN)), .(STN, HOUR)]

为了继续您第一次尝试使用聚合,我提供了这个解决方案。 aggregateby 参数中请求列表或数据框,然后将其应用于给定数据。在我看来 group_by 加上总结是一个更流畅的解决方案。 尽管如此,这个解决方案也应该在这里显示。

library(dplyr)


copy14 <- read.csv("R/rain.csv")

data <- copy14 %>%
  aggregate(by = copy14 %>%
              select(STN, HOUR),
            FUN=mean)