使用R的季节平均值

时间:2018-07-01 03:36:42

标签: r average

我有按位置(纬度和经度)的每日数据,我想按季节取平均值。我想将1月至3月视为第1季,4月至6月的第2季,7月至9月的第3季,10月至12月的第4季。

Lat            Long           Date          Value.
30.497478    -87.880258      01/01/2016       10
30.497478    -87.880258      02/02/2016       15
30.497478    -87.880258      02/05/2016       20
33.284928    -85.803608      01/02/2016       10
33.284928    -85.803608      01/03/2016       15
33.284928    -85.803608      01/05/2016       20

输出应为

Lat              Long         Season      Avg Value
30.497478      -87.880258       1            15

除了均值外,还希望添加Median和SD。我已经看到了一些使用Zoo Zoo和dplyr库的示例,但是在这种情况下却无法使用。希望这里有人可以提供帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

也许是这样的:

df <- read.table(text = "
                 Lat            Long           Date          Value.
30.497478    -87.880258      01/01/2016       10
                 30.497478    -87.880258      02/02/2016       15
                 30.497478    -87.880258      02/05/2016       20
                 33.284928    -85.803608      01/02/2016       10
                 33.284928    -85.803608      01/03/2016       15
                 33.284928    -85.803608      01/05/2016       20", header = T)


df$Season <- cut(as.numeric(substr(df$Date, 4, 5)), c(1,4,7,10,12), c(1,2,3,4), include.lowest = T)

library(dplyr)
options(pillar.sigfig = 6) # to prevent Lat and Long to be rounded

df %>% 
  group_by(Lat, Long, Season) %>% 
  select(-Date) %>% # since all other variables all grouping vars, just deselect Date
  summarise_all(funs(mean, median, sd))

     Lat     Long Season    mean  median        sd
    <dbl>    <dbl> <fct>    <dbl>   <dbl>     <dbl>
1 30.4975 -87.8803 1      12.5000 12.5000   3.53553
2 30.4975 -87.8803 2      20.0000 20.0000 NaN      
3 33.2849 -85.8036 1      12.5000 12.5000   3.53553
4 33.2849 -85.8036 2      20.0000 20.0000 NaN     

请注意,对于第2季度,无法给出sd,因为样本数据中的纬度和经度的每种组合只有一个值。