R汇总到多列

我目前正在使用75列的大型数据框,大约9500行。该数据框包含1995-2019年期间每天的多个观测点的观测值。 数据框看起来像来自此的示例:

date             x1      x2     x3       x4       x5     xn     year    month    day
  <date>       <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1 1995-01-01    50.8    62.2    90.2    60        NA    53.2    1995      1    1
2 1999-08-02    62.6    58.7    NA      72        NA    61.1    1999      8    2
3 2001-09-03    57.2    49.9    70.1    68.4      NA    56.6    2001      9    3
4 2008-05-04    56.6    56.4    75.8    65.5      NA    58.6    2008      5    4
5 2012-04-05    36.8    43.2    83.3    63.2      NA    36.2    2012      4    5
6 2019-12-31    39.1    41.6    98.5    55.9      NA    44.4    2019      12   31
str(df)
tibble [9,131 x 75] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ date   : Date[1:9131], format: "1995-01-01" "1995-01-02" ...
 $ x1     : num [1:9131] 50.8 62.6 57.2 56.6 36.8 ...
 $ x2     : num [1:9131] 62.2 58.7 49.9 56.4 43.2 ...
   xn
 $ year   : num [1:9131] 1995 1995 1995 1995 1995 ...
 $ month  : num [1:9131] 1 1 1 1 1 1 1 1 1 1 ...
 $ day    : num [1:9131] 1 2 3 4 5 6 7 8 9 10 ...

我的目标是为每个观测点xn每年获得超过一定限制的所有观测值的总和。 到目前为止,我试图通过Aggregate函数实现这一目标。

为了获得每年的平均值,我使用以下命令:

aggregate(list(df), by=list(year=df$year), mean, na.rm=TRUE)

这很完美,我得到每个观察点每年的平均值。

为了得到一个站的总和,我使用了以下代码

aggregate(list(x1=df$x1), by=list(year=df$year), function(x) sum(rle(x)$values>120, na.rm=TRUE))

结果是此打印:

   year      x1
1  1995      52
2  1996      43
3  1997      44
4  1998      42
5  1999      38
6  2000      76
7  2001      52
8  2002      58
9  2003     110
10 2004      34
11 2005      64
12 2006      46
13 2007      46
14 2008      17
15 2009      41
16 2010      30
17 2011      40
18 2012      47
19 2013      40
20 2014      21
21 2015      56
22 2016      27
23 2017      45
24 2018      22
25 2019      45

到目前为止,一切都很好。我知道我可以通过将(..,x2 = data $ x2,x3 = data $ x3,.. xn)添加到上面代码中的列表参数来扩展代码。我尝试了,他们工作了。

但是我如何一次获得它们呢?

我尝试了以下代码:

aggregate(.~(date, year, month, day), by=list(year=df$year), function(x) sum(rle(x)$values>120, na.rm=TRUE))
Fehler: Unerwartete(s) ',' in "aggregate(.~(date,"
aggregate(.~date+year+month+day, by=list(year=df$year), function(x) sum(rle(x)$values>120, na.rm=TRUE))
Fehler in as.data.frame.default(data, optional = TRUE) : 
  cannot coerce class ‘"function"’ to a data.frame
aggregate(. ~ date + year + month + day, data = df,by=list(year=df$year), function(x) sum(rle(x)$values>120, na.rm=TRUE))
Fehler in aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...) : 
  Argumente müssen dieselbe Länge haben

但不幸的是,它们都不起作用。有人可以给我提示我的错误在哪里吗?

评论