R - 基于日期列使用 group_by 的平均计算?

Posted

技术标签:

【中文标题】R - 基于日期列使用 group_by 的平均计算?【英文标题】:R - Mean calculation using group_by based on Date column? 【发布时间】:2020-01-28 13:40:36 【问题描述】:

*在发布之前,我浏览了这篇文章,但它不适用于我的数据中的日期格式:

Using R & dplyr to summarize - group_by, count, mean, sd*

----------------------------------------------- ----------------------

我有什么:

我有一个包含两列(即“日期”和“平均值”)的数据框,其中包含 5 年的日平均降水量。

这是这个数据帧的头部和尾部:

> head(years_nc)
    Date    Average
1 2010-01-01 0.00207909
2 2010-01-02 0.00207909
3 2010-01-03 0.00207909
4 2010-01-04 0.00207909
5 2010-01-05 0.00207909
6 2010-01-06 0.00207909

> tail(years_nc)
          Date     Average
3334271 2014-12-26 0.004983558
3334272 2014-12-27 0.004983558
3334273 2014-12-28 0.004983558
3334274 2014-12-29 0.004983558
3334275 2014-12-30 0.004983558
3334276 2014-12-31 0.004983558

为了让事情更清楚,你可以下载这个数据框:

https://www.dropbox.com/s/7wozzxvu6uckqsu/MyData.csv?dl=1

我的目标:

我正在尝试分别计算每年“平均”列的平均值。

这是我的代码:

library(dplyr)
library(lubridate)

years_nc %>%
  group_by(Date) %>%
  summarize(avg_preci = mean(Average, na.rm = TRUE))

它只返回一个值:

> 
   avg_preci
1 0.00195859

但我希望 R:

(a) 每年分组;

(b) 然后计算我每年平均降水量的平均值。

换句话说,我必须有 5 个平均值;每年一个值。

我的代码有什么错误?

有人可以帮我解决这个问题吗?

谢谢。

【问题讨论】:

你只是在years_nc %>% group_by(year(Date)) %>% summarize(avg_preci = mean(Average, na.rm = TRUE))中错过了year(Date) 编写的代码至少应该为您提供每个日期的平均值(尽管不是每年)。您是否有可能将旧的 plyr 包与 dplyr 一起加载?尝试将您的呼叫更改为 summarize()dplyr::summarize(),看看它现在是否尊重您的日期分组。 你们都是对的。使用@deepseefan 的答案中也反映的 cmets 是正确的。谢谢。 【参考方案1】:

你几乎是在正确的方式。首先确保您的Date 列实际上是date。然后,当您进行分组时,请通过 year 进行分组,而不是通过您的数据框中的 ymd 进行分组。脚本可以修改如下。

years_nc$Date <- ymd(years_nc$Date)

years_nc %>%
  group_by(year(Date)) %>%
  summarize(avg_preci = mean(Average, na.rm = TRUE))
# #A tibble: 5 x 2
#     `year(Date)` avg_preci
#           <dbl>     <dbl>
# 1         2010   0.00196
# 2         2011   0.00196
# 3         2012   0.00196
# 4         2013   0.00196
# 5         2014   0.00196

【讨论】:

以上是关于R - 基于日期列使用 group_by 的平均计算?的主要内容,如果未能解决你的问题,请参考以下文章

r - 使用 group_by 和 mutate 根据多个条件添加新列时出现意外的“=”

根据“调整后的 group_by”创建一列 - R

基于分子中特定条件的平均值

基于日期时间列名称的数据框的条件平均值

If_else 语句基于多个列,创建一个基于 R 中的真实语句数量平均的分数

使用 pandas/dataframe 基于 2 列计算加权平均值