【发布时间】:2018-07-03 06:30:48
【问题描述】:
以下问题让我非常头疼。
我有一个看起来像这样的大数据集。
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 比较陌生并且我不知道如何解决这个问题,我希望找到可以解决这个问题的人并向我展示如何解决这样的问题。 非常感谢您的支持:)
【问题讨论】:
-
也请分享您的数据。在此处查看更多信息How to make a great R reproducible example?
-
看看
stats包(即,没有安装)。在将日期格式化为 %Y-%m 之后,您将希望通过(名称,日期)aggregate,然后将mean作为函数传递。这应该可以帮助您入门:aggregate(.~Name+MonthDate, data, FUN=mean, na.rm=TRUE).
标签: dataframe