R 使用apply在时间序列子集上运行函数

R 使用apply在时间序列子集上运行函数,r,time-series,subset,apply,R,Time Series,Subset,Apply,我正在做一个预测伊拉克省级暴力的项目。我拥有的数据是所有19个省份的四个参数(α、λ、τ和β)的月度数据。我试图使用一个控制趋势和季节成分的线性模型,分别预测每个省份的四个参数中的每一个,该模型使用R中的forecast包中的forecast函数(更复杂的模型如下:)。下面的示例代码显示了我对第一个省(安巴尔省)感兴趣的代码和数量。但是,我希望使用apply函数族为所有省份(每个省份的alpha、lambda、tau和beta)提供一种更省钱的方法,而不是一个接一个地处理每个省份。例如,我想使用

我正在做一个预测伊拉克省级暴力的项目。我拥有的数据是所有19个省份的四个参数(α、λ、τ和β)的月度数据。我试图使用一个控制趋势和季节成分的线性模型,分别预测每个省份的四个参数中的每一个,该模型使用R中的
forecast
包中的
forecast
函数(更复杂的模型如下:)。下面的示例代码显示了我对第一个省(安巴尔省)感兴趣的代码和数量。但是,我希望使用apply函数族为所有省份(每个省份的alpha、lambda、tau和beta)提供一种更省钱的方法,而不是一个接一个地处理每个省份。例如,我想使用
df_list按省份对数据进行子集划分,然后使用
restrape2
将数据转换为长格式,然后从plyr为每个地区应用
ddply

library(reshape2)
dat.m <- melt(dat,id.vars=c('date','province'))
library(plyr)

ddply(dat.m,.(province),function(ts){
## each ts looks like this (here for alpha)
## you can process it 
# date province variable      value
# 1 2014-09-21  region1    alpha  0.3981059
# 2 2015-01-06  region1    alpha -0.6120264


})
library(重塑2)

dat.m谢谢agstudy和Roland!因此,我使用了稍微修改过的
ddply
版本,并能够使其正常工作。下面是示例代码。再次感谢

library(plyr)

main_data<-read.csv("Iraq_by_province_2004-2009.csv", header=TRUE)

attach(main_data)


##Alpha
alpha_function = function(x) {
   ts_alpha<-ts(x$alpha, frequency=12, start=c(2004, 7))
    fit_alpha <- tslm(ts_alpha~ trend + season, )
    return(data.frame(forecast(fit_alpha, h=4, level=c(68,95), fan=FALSE,
        ts=TRUE)))               
}

ddply(main_data, .(province), alpha_function)
库(plyr)

你想要的方法。有许多函数实现了这一点。plyr软件包提供了一个很好的语法。如果您使用melt(如我在回答中所示)输入长格式,您可以对所有希腊人使用相同的函数,在上面的函数中,您可以通过x$value更改x$alpha。啊,非常聪明!这是一个演示代码,所以我将继续使用您的代码格式。再次感谢!
library(plyr)

main_data<-read.csv("Iraq_by_province_2004-2009.csv", header=TRUE)

attach(main_data)


##Alpha
alpha_function = function(x) {
   ts_alpha<-ts(x$alpha, frequency=12, start=c(2004, 7))
    fit_alpha <- tslm(ts_alpha~ trend + season, )
    return(data.frame(forecast(fit_alpha, h=4, level=c(68,95), fan=FALSE,
        ts=TRUE)))               
}

ddply(main_data, .(province), alpha_function)