我的大脑被冻僵了,希望你们中的一个能给我指明正确的方向。我的最终目标是输出各种回归系数(主要是对价格弹性感兴趣),这是通过简单的多元回归,使用"by“函数实现的。
我使用"by“函数来循环"State.UPC”变量的每一次迭代的回归公式。由于我的数据相当大(~1MM行),所以我不得不将数据子集为3-4状态组(参见mystates1...mystates10)。然后,我将对这些子集执行回归,每次在"datastep3“数据框架中更改数据源。这就是我需要你帮忙的地方
用我现有的“回归函数”和"for“循环的组合来高效地重写它的最佳方法是什么,这样我就可以绕过在"datastep3”和"write.csv“步骤中不断更改数据帧名称的步骤。本质上,R循环遍历每个“mystate”数据子集,并通过"State.UPC“属性进行回归?
我尝试过几种组合,但都没有成功。请原谅业余的question...still学习R.这里是我的代码:
data <-read.csv("PriceData.csv")
datastep1 <-subset(data, subset=c(X..Vol>0, Unit.Vol>0))
datastep2 <- transform(datastep1, State.UPC = paste(State,UPC, sep="."))
mystates1 <- c("AL","AR","AZ")
mystates2 <- c("CA","CO","FL")
mystates3 <- c("GA","IA","IL")
mystates4 <- c("IN","KS","KY")
mystates5 <- c("LA","MI","MN")
mystates6 <- c("MO","MS","NC")
mystates7 <- c("NJ","NM","NV")
mystates8 <- c("NY","OH","OK")
mystates9 <- c("SC","TN","TX")
mystates10 <- c("UT","VA","WI","WV")
datastep3 <-subset(datastep2, subset=State %in% mystates10)
datastep4 <-na.omit(datastep3)
PEbyItem <- by(datastep4, datastep4$State.UPC, function(df)
lm(log(Unit.Vol)~log(Price) + Distribution+Independence.Day+Labor.Day+Memorial.Day+Thanksgiving+Christmas+New.Years+
Year+Month, data=df))
x <- do.call("rbind",lapply(PEbyItem, coef))
y <-data.frame(x)
write.csv(x, file="mystates10.csv", row.names=TRUE)发布于 2014-04-01 18:10:18
不可能对此进行测试,因为您没有提供任何数据,但理论上您可以将各种mystatesN组合到一个列表中,然后在列表上运行lapply(...)。
## Not tested...
get.PEbyItem <- function(i) {
datastep3 <-subset(datastep2, subset=State %in% mystates[[i]])
datastep4 <-na.omit(datastep3)
PEbyItem <- by(datastep4, datastep4$State.UPC, function(df)
lm(log(Unit.Vol)~log(Price) + Distribution+Independence.Day+Labor.Day+
Memorial.Day+Thanksgiving+Christmas+New.Years+Year+Month,
data=df))
x <- do.call("rbind",lapply(PEbyItem, coef))
y <-data.frame(x)
write.csv(x, file=paste(names(mystates[i]),"csv",sep="."), row.names=TRUE)
}
mystates <- list(ms1=mystates1, ms2=mystates2, ..., ms10=mystates10)
lapply(1:length(mystates),get.PEbyItem)还有很多其他的东西可以改进,但是没有数据集,尝试是没有意义的。
https://stackoverflow.com/questions/22791899
复制相似问题