如何分别计算不同站点数据字段的平均值
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)]
为了继续您第一次尝试使用聚合,我提供了这个解决方案。
aggregate
在 by
参数中请求列表或数据框,然后将其应用于给定数据。在我看来 group_by 加上总结是一个更流畅的解决方案。
尽管如此,这个解决方案也应该在这里显示。
library(dplyr)
copy14 <- read.csv("R/rain.csv")
data <- copy14 %>%
aggregate(by = copy14 %>%
select(STN, HOUR),
FUN=mean)
我正在尝试根据 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)]
为了继续您第一次尝试使用聚合,我提供了这个解决方案。
aggregate
在 by
参数中请求列表或数据框,然后将其应用于给定数据。在我看来 group_by 加上总结是一个更流畅的解决方案。
尽管如此,这个解决方案也应该在这里显示。
library(dplyr)
copy14 <- read.csv("R/rain.csv")
data <- copy14 %>%
aggregate(by = copy14 %>%
select(STN, HOUR),
FUN=mean)