#将数据按照月份划分
#假如数据框是data,第一列是数据,第二列是日期(格式是2014-01),第三列是地名(local),第四列是产业名(product)
ds<-sort(as.character(unique(data[,2])))#将所有的日期提取出来,形成可能出现的月份,并排序
m1<-length(ds)
data2<-list()
for(k in 1:m1){
dv<-data[data[,2]==ds[k],]#每个月的数据
data2[[k]]<-dv[order(dv[,3]),]#将每个月的数据按照地理名称(默认是汉语拼音首字母)排序
}
#这样就得到了每个月的数据,而且是按照地理名称排名的
#接下来就得到各个季度的季度值(季度值是累加的,如第二季度其实是前六个月的累计值)
#先将数据按照各个季度合在一起
#首先将月份数据转化为季度数据
m2<-m1/3#每个季度三个月
data3<-list()
for(k in 1:m2)
data3[[k]]<-rbind(data2[[3*k-2]],data2[[3*k-1]],data5[[2*k]])
#再算出各个季度的当季(三个月,比如:第二季度其实是6,7,8三个月)数据
fun1<-function(data3){
data3<-data3[order(data3[,3]),]#按照地理名称排名
dm1<-unique(data3[,3]);#地名
dv5<-c()
for(i in 1:length(dm1)){
dv2<-data3[data3[,3]==dm1[i],]
dm2<-unique(dv2[,4])#产业名
dv4<-c()
for(j in 1:length(dm2)){
dv3<-c(dm1[i],dm2[j],sum(as.numeric(dv2[dv2[,4]==dm2[j],1])))
dv4<-rbind(dv4,dv3)
}
dv5<-rbind(dv5,dv4)
}
return(dv5)#这样得到的数据格式为(“地名”,“产业名”,数据)
}
data4<-list()
for(k in 1:m2)
data4[[k]]<-fun1(data3[[k]])#得到数据的当期值
#最后计算出季度值(累积值)
data5<-rbind(data4[[1]],data4[[2]])#2季度合并
data6<-rbind(data4[[1]],data4[[2]],data4[[3]])#3季度合并
data7<-rbind(data4[[1]],data4[[2]],data4[[3]],data4[[4]])#4季度合并
data8<-fun1(data6)#2季度累积值
data9<-fun1(data6)#3季度累积值
data10<-fun1(data7)#4季度累积值
data_q<-list(data4[[1]],data8,data9,data10)#四个季度的累积值
#需要注意,其实每年的第四个季度的累积值就是年份数据,所以就不用都说了哈
#将同一地区的数据累加
#自己编写的函数
data11<-list()
for(k in 1:m2){
dm<-unique(data_q[[k]][,1])
dv2<-numeric(length(dm))
for(i in 1:length(dm)){
dv2[i]<-sum(as.numeric(data_q[[k]][data_q[[k]][,1]==dm[i],3]))#将某个地名的数据累加求和
}
data11[[k]]<-dv2
}
#利用reshape2包
library(reshape2)#先安装该包,再library
data12<-dcast(data_q,local~product,sum);#以变量local作为行,product作为列输出数据