Arrays R中带数组的函数

Arrays R中带数组的函数,arrays,r,Arrays,R,假设我有过去20年的最高气温数据。我的数据框中有一列表示月、日、年和最高温度数据。我想计算从一年的6月31日到前一年的7月1日(即从1991年7月1日到1992年6月31日的平均最高日温度)的平均值(以及标准偏差和范围)。有没有一种有效的方法可以做到这一点 到目前为止,我的方法是创建一个数组: maxt.prev12<-tapply(maxt$MAX_C,INDEX=list(maxt$month,maxt$day,maxt$year),mean) 我将创建一个“指标年”列,该列等于7月

假设我有过去20年的最高气温数据。我的数据框中有一列表示月、日、年和最高温度数据。我想计算从一年的6月31日到前一年的7月1日(即从1991年7月1日到1992年6月31日的平均最高日温度)的平均值(以及标准偏差和范围)。有没有一种有效的方法可以做到这一点

到目前为止,我的方法是创建一个数组:

maxt.prev12<-tapply(maxt$MAX_C,INDEX=list(maxt$month,maxt$day,maxt$year),mean)
我将创建一个“指标年”列,该列等于7月至12月的年份,但等于1月至6月的年份

根据数字而非字符这一事实编辑了月份参考:

> maxt$year2 <- maxt$year
> maxt[ maxt$month %in% 1:6, "year2"] <- 
+                         maxt[ maxt$month %in% 1:6, "year"] -1
> # month.name is a 12 element constant vector in all versions of R
> # check that it matches the spellings of your months
> 
> mean_by_year <- tapply(maxt$MAX_C, maxt$year2, mean, na.rm=TRUE)
> mean_by_year
    1989     1990     1991     1992 
28.50000 27.50000 27.50000 26.83333 
>maxt$year2 maxt[maxt$month%在%1:6,“year2”]#month.name在所有版本的R中都是12个元素的常量向量
>#检查它是否与您月份的拼写匹配
> 
>年平均数年平均数年平均数
1989     1990     1991     1992 
28.50000 27.50000 27.50000 26.83333 
如果要更改标签,使其反映非日历年的衍生:

> names(mean_by_year) <- paste(substr(names(mean_by_year),3,4),
+                       as.character( as.numeric(substr(names(mean_by_year),3,4))+1), 
                               sep="_")
> mean_by_year
   89_90    90_91    91_92    92_93 
28.50000 27.50000 27.50000 26.83333 
>姓名(按年份平均)按年份平均
89_90    90_91    91_92    92_93 
28.50000 27.50000 27.50000 26.83333 
尽管我不认为这在千禧年之交是正确的。

我会创建一个“指标年”列,它等于7月-12月的年份,但等于1月-6月的年份

根据数字而非字符这一事实编辑了月份参考:

> maxt$year2 <- maxt$year
> maxt[ maxt$month %in% 1:6, "year2"] <- 
+                         maxt[ maxt$month %in% 1:6, "year"] -1
> # month.name is a 12 element constant vector in all versions of R
> # check that it matches the spellings of your months
> 
> mean_by_year <- tapply(maxt$MAX_C, maxt$year2, mean, na.rm=TRUE)
> mean_by_year
    1989     1990     1991     1992 
28.50000 27.50000 27.50000 26.83333 
>maxt$year2 maxt[maxt$month%在%1:6,“year2”]#month.name在所有版本的R中都是12个元素的常量向量
>#检查它是否与您月份的拼写匹配
> 
>年平均数年平均数年平均数
1989     1990     1991     1992 
28.50000 27.50000 27.50000 26.83333 
如果要更改标签,使其反映非日历年的衍生:

> names(mean_by_year) <- paste(substr(names(mean_by_year),3,4),
+                       as.character( as.numeric(substr(names(mean_by_year),3,4))+1), 
                               sep="_")
> mean_by_year
   89_90    90_91    91_92    92_93 
28.50000 27.50000 27.50000 26.83333 
>姓名(按年份平均)按年份平均
89_90    90_91    91_92    92_93 
28.50000 27.50000 27.50000 26.83333 

尽管我不认为这在千禧年之交是正确的。

样本数据将非常有用。使用
dput(myData)
dput
很好,因为回复您帖子的人不必重新导入数据(比如将日期列导入POSIX*)。很抱歉,这里的内容含糊不清。如果数据集名为
maxt
,则在R控制台中运行
dput(maxt)
。复制该命令的输出并将其粘贴到问题中。这将允许其他人在我们的R会话中重新创建数据集。需要明确的是,这将是数据集的精确副本,因此,如果它是不应共享的敏感数据,则创建一些说明问题的虚拟数据。示例数据将非常有用。使用
dput(myData)
dput
很好,因为回复您帖子的人不必重新导入数据(比如将日期列导入POSIX*)。很抱歉,这里的内容含糊不清。如果数据集名为
maxt
,则在R控制台中运行
dput(maxt)
。复制该命令的输出并将其粘贴到问题中。这将允许其他人在我们的R会话中重新创建数据集。需要明确的是,这将是数据集的精确副本,因此,如果它是不应共享的敏感数据,则创建一些虚拟数据来说明问题。