用R选择时间序列的三个月
我有一个包含温度数据的每日数据集,希望提取季节平均值。从每日数据中,很容易使用用R选择时间序列的三个月,r,time-series,dplyr,lubridate,R,Time Series,Dplyr,Lubridate,我有一个包含温度数据的每日数据集,希望提取季节平均值。从每日数据中,很容易使用 my.data.winter<-subset(my.data, format.Date(fecha, "%m")=="12" | format.Date(fecha, "%m")=="01" | format.Date(fecha, "%m")=="02") 现在我想得到系列中每个不同年份的冬季平均值。第一次尝试可能是 DATE1<-"1982-12-01" DATE2<-"1983-02-28"
my.data.winter<-subset(my.data, format.Date(fecha, "%m")=="12" | format.Date(fecha, "%m")=="01" | format.Date(fecha, "%m")=="02")
现在我想得到系列中每个不同年份的冬季平均值。第一次尝试可能是
DATE1<-"1982-12-01"
DATE2<-"1983-02-28"
my.newdata<-subset(my.data.winter, my.data.winter$fecha > DATE1 & my.data.winter$fecha < DATE2 )
要使用此解决方案,我需要构建一个包含DATE1/DATE2的成对值的日期向量或数据框,但我更希望只设置起始值并选择三个月。必须有一个更干净/更聪明的方法。我检查过lubridate,从1982年12月开始计算月数,再加上2个月,我得到14个月,我想得到1983年2月和dplyr,但我不知道如何做到这一点
提前感谢您的帮助或者您可以使用dplyr:
这给了你:
> x
Source: local data frame [4 x 3]
Groups: season [?]
season year2 mean
<chr> <dbl> <dbl>
1 winter 1982 290.7605
2 winter 1983 290.5127
3 winter 1984 290.9434
4 winter 1985 293.5770
注意:您可以在整个数据集上使用它,它将为您完成所有的子集设置,而不必为您的主数据框创建四个单独的子集如果您使用的是日期格式,为什么不添加天而不是月呢。然后您可以设置Date2=Date+3*30,然后使用子集。您只是每年进行聚合。不是每个冬季。@Sotos他的问题明确地说,现在我想得到系列中每个不同年份的冬季平均值。我知道,但1982年的冬季介于1982-12-01和1983-02之间-28@Sotos这应该可以解决这个问题。我现在无法检查它,但我将删除否决票
library(dplyr)
x <- my.data.winter %>%
#add month and year column using lubridate package
mutate(month = lubridate::month(fecha), year = lubridate::year(fecha))%>%
#add the seasons for each value
mutate(season = case_when(.$month == 12 | .$month == 1 | .$month == 2 ~ "winter",
.$month == 3 | .$month == 4 | .$month == 5 ~ "spring",
.$month == 6 | .$month == 7 | .$month == 8 ~ "summer",
.$month == 9 | .$month == 10 | .$month == 11 ~ "fall")) %>%
#if month is december, classify it as the next year (for aggregation)
mutate(year2 = ifelse(.$month == 12, year+1, year)) %>%
group_by(season, year2) %>%
summarize(mean = mean(V1))
> x
Source: local data frame [4 x 3]
Groups: season [?]
season year2 mean
<chr> <dbl> <dbl>
1 winter 1982 290.7605
2 winter 1983 290.5127
3 winter 1984 290.9434
4 winter 1985 293.5770