R:如果另一列具有不同的值,如何使用aggregate() - 函数对一列中的数据求和?

时间:2015-07-17 14:01:12

标签: r aggregate plyr

平, 我的聚合函数有问题。我的数据如下:

 transect_id    year    day month   LST precipitation   
 1  TR001   2010    191 4   30.62083    0.0000  
 2  TR001   2010    191 4   30.62083    0.0003  
 3  TR001   2010    191 5   30.62083    0.0001  
 4  TR001   2010    191 7   30.62083    0.0000  
 5  TR001   2010    191 7   30.62083    0.0000  
 6  TR001   2011    191 7   30.62083    0.0007

我想总结每年每个季度的降水量。这意味着:每年1-3个月,4-6个月,7-9个月和10-12个月的总降水量(在我的情况下为2010-2013)。并为其添加一列。 我想我应该使用plyr-package中的mutate() - 函数然后执行类似

的操作
weather_gam.mutated<-mutate(weather_gam, precipitation.spring=aggregate(precipitation by = list(Category=year)))

但这几个月该怎么办?我根本想不出来。我试过像by = list(Category= month==1)这样的东西,但显然这不是在这里取得成功所需要的。 所以基本上我只是尝试做SUMIFS(F1:Fx, B1:Bx = "2010", D1:Dx = "1", D1:Dx = "2", D1:Dx = "3"在Excel中会做的事情,我希望通过设置

by = list(Category=year)

当年份相同时,它会自动总和,所以我不需要每年手动完成。 我真的很感激这里的任何帮助,如果你有一个完全不同的想法如何解决它。

2 个答案:

答案 0 :(得分:1)

以下是dplyrlubridate的解决方案;我们的想法是使用quarter的{​​{1}}函数来查找属于哪个季度的月份。创建lubridate列,按季度分组,并为每个组创建总和或Quarter

precipitation

这里是library(lubridate) library(dplyr) df$month <- month(df$month) df %>% mutate(Quarter = quarter(month)) %>% group_by(Quarter) %>% mutate(SumPre = sum(precipitation)) Source: local data frame [6 x 8] Groups: Quarter transect_id year day month LST precipitation Quarter SumPre 1 TR001 2010 191 4 30.62083 0e+00 2 4e-04 2 TR001 2010 191 4 30.62083 3e-04 2 4e-04 3 TR001 2010 191 5 30.62083 1e-04 2 4e-04 4 TR001 2010 191 7 30.62083 0e+00 3 7e-04 5 TR001 2010 191 7 30.62083 0e+00 3 7e-04 6 TR001 2011 191 7 30.62083 7e-04 3 7e-04

的另一种方法
aggregate

数据

library(lubridate)
df$month <- month(df$month)
df$Quarter <- quarter(df$month)
aggregate(precipitation ~ Quarter, data = df, sum)
Quarter precipitation
1       2         4e-04
2       3         7e-04

答案 1 :(得分:0)

使用dplyr而不是plyr:

library(dplyr)

d.in %>%
    mutate(q=cut(month, c(0,3,6,9,12), labels=c("q1", "q2", "q3", "q4"))) %>%
    group_by(year, q) %>%
    mutate(sum.prec = sum(precipitation))