有条件计算每月每月平均值dplyr

时间:2018-03-29 13:39:34

标签: r dplyr summarize

我有很长时间的数据流的大型数据集(7到20年的数据)。我想获得每个站点每年的每月TOC值,但有时候某个月只有1个TOC值,而其他月份有2个或更多。当我使用汇总(下面的示例)时,我只获得了仅有1个TOC值的实例的NA。

df_TOC <- df %>% group_by(Site,Year, Month) %>% summarise(AvgTOC=mean(TOC))

我想在如何使用条件语句汇总数据方面提供一些帮助:

如果TOC每月有2个或更多值,则计算平均值;如果没有,则粘贴该月的单个值。

Site  Month Year  TOC
AAA   Jan   1975  5
AAA   Feb   1975  7
AAA   Feb   1975  8
AAA   March 1975  10
AAA   March 1975  12
AAA   April 1975  13
BBB   Jan   1975  6
BBB   Jan   1975  3
BBB   Feb   1975  6
BBB   Feb   1975  12
BBB   Feb   1975  17
BBB   March 1975  4

2 个答案:

答案 0 :(得分:1)

您的代码完全符合您的要求。单个值的平均值是值本身。

myData = read.table(textConnection("Site  Month Year  TOC
AAA   Jan   1975  5
AAA   Feb   1975  7
AAA   Feb   1975  8
AAA   March 1975  10
AAA   March 1975  12
AAA   April 1975  13
BBB   Jan   1975  6
BBB   Jan   1975  3
BBB   Feb   1975  6
BBB   Feb   1975  12
BBB   Feb   1975  17
BBB   March 1975  4"), header = TRUE)

library(dplyr)
df_TOC = myData %>% group_by(Site,Year, Month) %>% summarise(AvgTOC=mean(TOC))
> df_TOC 
## A tibble: 7 x 4
## Groups:   Site, Year [?]
#    Site  Year  Month   AvgTOC
#  <fctr> <int> <fctr>    <dbl>
#1    AAA  1975  April 13.00000 #<<<
#2    AAA  1975    Feb  7.50000
#3    AAA  1975    Jan  5.00000 #<<< These ones come from an single sample each
#4    AAA  1975  March 11.00000
#5    BBB  1975    Feb 11.66667
#6    BBB  1975    Jan  4.50000
#7    BBB  1975  March  4.00000 #<<<

答案 1 :(得分:0)

我是基础R函数ExampleClass的忠实粉丝,并且根据评论,您似乎可能有NA值导致NAs - 因为单个值的平均值应该只是该值。试试:

aggregate

我们使用aggregate(x = list(TOC_avg = myData$TOC), by = myData[,-4], mean, na.rm = T) 命名生成的聚合值,数据中的第4列是原始TOC列。