跟进我的 previous question关于将每小时数据汇总到每日数据中,我想继续(a)每月汇总和(b)将每月汇总合并到原始数据帧中. 我的原始数据框如下所示: Lines - "Date,Outdoor,Indoor01/01/2000 01:00,30
我的原始数据框如下所示:
Lines <- "Date,Outdoor,Indoor 01/01/2000 01:00,30,25 01/01/2000 02:00,31,26 01/01/2000 03:00,33,24 02/01/2000 01:00,29,25 02/01/2000 02:00,27,26 02/01/2000 03:00,39,24 12/01/2000 02:00,27,26 12/01/2000 03:00,39,24 12/31/2000 23:00,28,25"
我的previous question中已经回答了每日聚合,然后我可以找到从那里生成每月聚合的方法,如下所示:
Lines <- "Date,Month,OutdoorAVE 01/01/2000,Jan,31.33 02/01/2000,Feb,31.67 12/01/2000,Dec,31.33"
其中OutdoorAVE是每日最低和最高室外温度的月平均值.我最终想要的是这样的:
Lines <- "Date,Outdoor,Indoor,Month,OutdoorAVE 01/01/2000 01:00,30,25,Jan,31.33 01/01/2000 02:00,31,26,Jan,31.33 01/01/2000 03:00,33,24,Jan,31.33 02/01/2000 01:00,29,25,Feb,31.67 02/01/2000 02:00,27,26,Feb,31.67 02/01/2000 03:00,39,24,Feb,31.67 12/01/2000 02:00,27,26,Dec,31.33 12/01/2000 03:00,39,24,Dec,31.33 12/31/2000 23:00,28,25,Dec,31.33"
我不知道如何做到这一点.任何帮助是极大的赞赏.
尝试ave和例如POSIXlt来提取月份:zz <- textConnection(Lines) Data <- read.table(zz,header=T,sep=",",stringsAsFactors=F) close(zz) Data$Month <- strftime( as.POSIXlt(Data$Date,format="%m/%d/%Y %H:%M"), format='%b') Data$outdoor_ave <- ave(Data$Outdoor,Data$Month,FUN=mean)
给:
> Data Date Outdoor Indoor Month outdoor_ave 1 01/01/2000 01:00 30 25 Jan 31.33333 2 01/01/2000 02:00 31 26 Jan 31.33333 3 01/01/2000 03:00 33 24 Jan 31.33333 4 02/01/2000 01:00 29 25 Feb 31.66667 5 02/01/2000 02:00 27 26 Feb 31.66667 6 02/01/2000 03:00 39 24 Feb 31.66667 7 12/01/2000 02:00 27 26 Dec 31.33333 8 12/01/2000 03:00 39 24 Dec 31.33333 9 12/31/2000 23:00 28 25 Dec 31.33333
编辑:然后只需计算数据中的月份,如上所示并使用合并:
zz <- textConnection(Lines2) # Lines2 is the aggregated data Data2 <- read.table(zz,header=T,sep=",",stringsAsFactors=F) close(zz) > merge(Data,Data2[-1],all=T) Month Date Outdoor Indoor OutdoorAVE 1 Dec 12/01/2000 02:00 27 26 31.33 2 Dec 12/01/2000 03:00 39 24 31.33 3 Dec 12/31/2000 23:00 28 25 31.33 4 Feb 02/01/2000 01:00 29 25 31.67 5 Feb 02/01/2000 02:00 27 26 31.67 6 Feb 02/01/2000 03:00 39 24 31.67 7 Jan 01/01/2000 01:00 30 25 31.33 8 Jan 01/01/2000 02:00 31 26 31.33 9 Jan 01/01/2000 03:00 33 24 31.33