R语言-将数据按照月份、季度、年份划分及求某个代码(地名、产业名等)对应的累积值

#将数据按照月份划分
#假如数据框是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作为列输出数据

 

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值