dataframe - 在特定时间范围内建立平均值
问题描述
以下问题让我非常头疼。
我有一个看起来像这样的大数据集。
Name Date C1 C2 C3 C4 C5 C6 C7
A 2008-01-03 100
A 2008-01-05 NA
A 2008-01-07 120
A 2008-02-03 NA
A 2008-03-10 50
A 2008-07-14 70
A 2008-07-15 NA
A 2009-01-03 40
A 2009-01-05 NA
A 2010-01-07 NA
A 2010-03-03 30
A 2010-03-10 20
A 2011-07-14 10
A 2011-07-15 NA
B 2008-01-03 NA
B 2008-01-05 5
B 2008-01-07 3
B 2008-02-03 11
B 2008-03-10 13
B 2008-07-14 ....
如您所见,我的观察中有很多 NA。其他列看起来相似,数据集有 +100.000 行。所以它很大。
我想要做的是,我想通过以下方式聚合我的数据。例如 C1:我想在从 2000 年 1 月到 2012 年 12 月的时间范围内为每个名称以及每年和每个月建立每月平均值。
应使用每个月的可用日期计算月平均值。
计算完成后,我的数据集应如下所示。
Name Date C1 C2 C3 C4 C5 C6 C7
A 2008-01 monthly average
A 2008-02 monthly average
A 2008-03 monthly average
A 2008-04 monthly average
A 2008-05 monthly average
A 2008-06 monthly average
A 2008-07 monthly average
A 2008-08 monthly average
A 2008-09 monthly average
A 2008-10 monthly average
A 2008-11 monthly average
A 2008-12 monthly average
A 2009-01 monthly average
B 2008-01 monthly average
B 2008-02 monthly average
B 2008-03 monthly average
B 2008-04 monthly average
B 2008-05 monthly average
B 2008-06 ....
所以我的输出数据应该显示一年中每个月的每个名字。如果该月只有 NA 值,则值为 NA,或者它们是该特定月份的月平均值。
例如:
Name Date C1
A 2008-01-03 100
A 2008-01-05 NA
A 2008-01-07 120
在这里,我们期望:
Name Date C1
A 2008-01 (100+120)/2 = 110
例如:
Name Date C1
A 2008-01-03 NA
A 2008-01-05 NA
A 2008-01-07 NA
在这里,我们期望:
Name Date C1
A 2008-01 NA
例如:
Name Date C1
A 2008-01-03 100
A 2008-01-05 50
A 2008-01-07 120
在这里,我们期望:
Name Date C1
A 2008-01 (100+50+120)/3 = 90
由于我对 r 比较陌生而且我不知道如何解决这个问题,我希望找到能够解决这个问题的人并向我展示如何解决这样的问题。我将非常感谢您的支持:)
解决方案
library(dplyr)
#generating sample data
data <- data.frame(Name = c(rep("A",25), rep("B",50)),
Date = seq(as.Date("2018-01-01"), as.Date("2020-01-12"), by = 10),
C1 = rep(c(100,NA,NA,NA,NA,500,320,102,412,NA,200,NA,145,800,230),5))
#grouping by Name and Month and summarizing mean of values
data %>%
group_by(Name, month = cut(Date, "month")) %>%
summarise(C1 = mean(C1, na.rm = TRUE)) %>% mutate(C1 = ifelse(is.nan(C1),NA,C1))
推荐阅读
- sinon - 就 Sinon spy 的最新通话参数进行断言
- .htaccess - 转发“maindomain”,但保持“maindomain/en/”等仍然有效
- python - 尽管根据 getchildren() 存在子元素,python lxml 无法识别子元素
- vb.net - 如何在 Dim NormalVectorRotationMatrix As New devDept.Geometry.Matrix 之后将元素添加到矩阵
- api - OneLogin API 凭据
- powershell - 使用凭据启动作业失败,错误用户名/密码不正确
- javascript - 如何将 Django 变量传递给 Vue 道具
- python-3.x - 如何在向 keras 中的神经网络提供输入的同时使用两个不同的生成器?
- javascript - 标签文本未在 MUIDataTable ReactJS 中更新
- reactjs - 应用到 antd-component 的 styled-components 传递的 CSS 变量在 webpack 在生产模式下编译后消失