我有按位置(纬度和经度)的每日数据,我想按季节取平均值。我想将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库的示例,但是在这种情况下却无法使用。希望这里有人可以提供帮助。谢谢。
答案 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,因为样本数据中的纬度和经度的每种组合只有一个值。