R 如何存储大型数据集?
我使用的是巴斯扩散模型,通过做一个for循环,我找到了大约5000个产品的参数m、p和q。手动将这些参数放入excel表格中需要做大量的工作。有人知道在R中存储这些值的简单方法吗?比如在桌子上?这是我的代码:R 如何存储大型数据集?,r,bass,R,Bass,我使用的是巴斯扩散模型,通过做一个for循环,我找到了大约5000个产品的参数m、p和q。手动将这些参数放入excel表格中需要做大量的工作。有人知道在R中存储这些值的简单方法吗?比如在桌子上?这是我的代码: PID=unique(TotalBass4$ProdID) BassStored=NULL k=0 pidlistNAs=NULL for(pid in PID){ k=k+1 out <- lm(Sales ~ Cumsaleslag + Cumsalessqrt, da
PID=unique(TotalBass4$ProdID)
BassStored=NULL
k=0
pidlistNAs=NULL
for(pid in PID){
k=k+1
out <- lm(Sales ~ Cumsaleslag + Cumsalessqrt, data=subset(TotalBass4,subset=ProdID==pid))
P1a <- out$coef[1]
P1b <- out$coef[2]
P1c <- out$coef[3]
P1mplus <- (-P1b+sqrt(P1b**2-4*P1a*P1c))/(2*P1c)
P1mminus <- (-P1b-sqrt(P1b**2-4*P1a*P1c))/(2*P1c)
m <- P1mminus
p <- 1/m
q <- P1b+p
cmsl=subset(TotalBass4,subset=ProdID==pid)$Cumsaleslag
Spred <- Bassmodel(p, q, m, cmsl,T=30)$Sales
Spred <- ts(Spred)
BassStored[[k]]=list(parm=c(m,p,q),ProdID=pid) ## Spred=Spred
names(BassStored[[k]]$parm)=c("m","p","q")
if(is.na(P1c))
pidlistNAs=c(pidlistNAs,pid)
if((k%%10)==0)
print(k)
}
PID=unique(TotalBass4$ProdID)
已存储的数据=空
k=0
pidlistNAs=NULL
用于(pid中的pid){
k=k+1
out示例的一些可再现数据:
set.seed(2017-12-20)
p <- runif(10, min=0.006293, max=0.00689)
m <- runif(10, min=67380.15, max=68980.95)
q <- runif(10, min=0.61809, max=0.65804)
lapply(1:10, function(i) {
list(parm=c(m=m[i], p=p[i], q=q[i]), ProdID=i)
}) -> BassStored
我们可以将其转换为数据帧:
do.call(
rbind.data.frame,
lapply(1:length(BassStored), function(i){
as.list(unlist(BassStored[i]))
})
) -> xdf
xdf
## parm.m parm.p parm.q ProdID
## 2 67860.06 0.006689309 0.6468014 1
## 21 68054.35 0.006451261 0.6286121 2
## 3 68640.19 0.006372309 0.6181186 3
## 4 67829.24 0.006541486 0.6551225 4
## 5 68807.85 0.006517481 0.6454875 5
## 6 67886.29 0.006382578 0.6194927 6
## 7 67542.34 0.006625390 0.6212089 7
## 8 67635.12 0.006566107 0.6239669 8
## 9 67878.34 0.006826642 0.6545225 9
## 10 68778.44 0.006609701 0.6287901 10
清理名称:
xdf <- setNames(xdf, c("m", "p", "q", "ProdID"))
xdf
## m p q ProdID
## 2 67860.06 0.006689309 0.6468014 1
## 21 68054.35 0.006451261 0.6286121 2
## 3 68640.19 0.006372309 0.6181186 3
## 4 67829.24 0.006541486 0.6551225 4
## 5 68807.85 0.006517481 0.6454875 5
## 6 67886.29 0.006382578 0.6194927 6
## 7 67542.34 0.006625390 0.6212089 7
## 8 67635.12 0.006566107 0.6239669 8
## 9 67878.34 0.006826642 0.6545225 9
## 10 68778.44 0.006609701 0.6287901 10
欢迎使用SO!请阅读并…然后编辑您的问题!您正在寻找rbind或rbind.data.frame函数谢谢!我将查看这些函数查看split()
和lappy()
的组合。另一个变体是使用by()
(我更喜欢使用split()
和lappy())
以更好地控制结果的形式)。即使是粘贴到q wld帮助中的dput(head(TotalBass4))
的输出也会给您带来更多帮助。非常感谢您的帮助,它很有效!!@hrbrmstr
xdf <- setNames(xdf, c("m", "p", "q", "ProdID"))
xdf
## m p q ProdID
## 2 67860.06 0.006689309 0.6468014 1
## 21 68054.35 0.006451261 0.6286121 2
## 3 68640.19 0.006372309 0.6181186 3
## 4 67829.24 0.006541486 0.6551225 4
## 5 68807.85 0.006517481 0.6454875 5
## 6 67886.29 0.006382578 0.6194927 6
## 7 67542.34 0.006625390 0.6212089 7
## 8 67635.12 0.006566107 0.6239669 8
## 9 67878.34 0.006826642 0.6545225 9
## 10 68778.44 0.006609701 0.6287901 10
write.csv(xdf, "bassmodel.csv")