如何按日期对列表中的数据进行分组,并对R中的关联数据值求平均值?

如何按日期对列表中的数据进行分组,并对R中的关联数据值求平均值?,r,grouping,mean,R,Grouping,Mean,我想按日期(每天)将下面的数据分组,并得到每组的平均值 下面创建的数据集是三维数组,其中i=时间(以天为单位),j=纬度,k=经度。此数据集长度为4年(1461天),并具有“日期”属性来表示每个日期/日期。我想用“数据”来表示数据,这样我就得到了1月1日、1月2日等的一个平均值 #First create the example dataset tmintest=array(1:100, c(420,189,1461)) #create the list Variable <- list

我想按日期(每天)将下面的数据分组,并得到每组的平均值

下面创建的数据集是三维数组,其中i=时间(以天为单位),j=纬度,k=经度。此数据集长度为4年(1461天),并具有“日期”属性来表示每个日期/日期。我想用“数据”来表示数据,这样我就得到了1月1日、1月2日等的一个平均值

#First create the example dataset
tmintest=array(1:100, c(420,189,1461))

#create the list
Variable <- list(varName="rr")
Data = tmintest
xyCoords <- list(x = seq(-40.37,64.37,length.out=420), y = seq(25.37,72.37,length.out=189))
Dates <- list(start = seq(as.Date("2012-01-01"), as.Date("2015-12-31"), by="days"), end=seq(as.Date("2012-01-01"), as.Date("2015-12-31"), by="days"))
All <- list(Variable = Variable,Data=aperm(Data), xyCoords=xyCoords,Dates=Dates)
#Make sure the dates are characters (as in the original dataset I'm, working with)
All$Dates$start=as.character(All$Dates$start)
All$Dates$end=as.character(All$Dates$end)
但我得到了一个错误:

Error in aggregate.data.frame(as.data.frame(x), ...) : 
  arguments must have same length
我试图通过以下方式使用group_:

group_by(All$Dates)
但返回了以下错误:

Error in UseMethod("group_by_") : 
  no applicable method for 'group_by_' applied to an object of class "list"
我可以使用哪些函数按天分组数据,并表示R中列表中新创建的组

编辑: 我需要结果输出的大小为365 x 189 x 420,其中1:365是一年中的几天,189 x 420是纬度/经度


因此,我想使用all$Dates属性中的所有1月1日对大小为189 x 420的关联(all$Data)网格进行索引/分组(四年数据中有四个网格),然后得到这四个网格/数组的平均值。所以,在这个例子中,四个1月的第一次,将被平均,以产生一个大小为189x420的网格。这将在一年中的每一天进行,以生成最终的365 x 189 x 420数据集。这说明了我想做什么吗?

这并不快,但我认为它确实产生了所需的输出

library(lubridate)
date <- glue::glue("{month(ymd(All$Dates$start))}-{mday(ymd(All$Dates$start))}")
undate <- unique(date)
out <- array(dim=c(length(undate), 189, 420))
for(i in 1:length(undate)){
    w <- which(date == undate[i])
    out[i,,] <- apply(All$Data[w,,, drop=FALSE], c(2,3), mean)
}
库(lubridate)

您的脚本生成超过1亿条记录的
样本集的日期。这似乎是不必要的大,为一个小玩具的例子。
aggregate
groupby
命令不适用于您,因为它们有非常具体的要求。当您查看
所有$Dates
时,它只是列出两个项目,一个是开始日期,另一个是结束日期。不确定你为什么要计算什么类型的摘要?@MarioNiepel我已经更新了我的问题以澄清问题。Re:关于示例的大小,我想非常清楚Re:我的数据的大小/结构。谢谢Dave,这不是我想要做的。我编辑了我的问题以获得更清晰的答案。@matlabcat我编辑了答案以产生所需的结果。这非常有效。谢谢我更改了
glue
cmds,因为我在尝试将较大的数据块处理到
m时出错
library(lubridate)
date <- glue::glue("{month(ymd(All$Dates$start))}-{mday(ymd(All$Dates$start))}")
undate <- unique(date)
out <- array(dim=c(length(undate), 189, 420))
for(i in 1:length(undate)){
    w <- which(date == undate[i])
    out[i,,] <- apply(All$Data[w,,, drop=FALSE], c(2,3), mean)
}