我正在处理每次民意调查的收入/支出数据。 来自样本数据库的9,002个观测值通过这样的扩展因子代表3,155,937个家庭。
Homeid Income Factor
001 23456 678
002 42578 1073
.. .. ..
9002 62333 987
我试图通过扩大每个收入值乘以其因子来得到每十分位总收入的精确总结,这将得到3,155,937个排卵矢量,然后我使用'对于'循环以将每个值分配给它所属的Decile。
Three <- Nal %>% select(income,factor)
Five <- data.frame(income=rep(Three$income,Three$factor))
for(i in 1:31559379){if(i<=3155937){Five$Decil[i]=1}
else{if(i<=6311874){Five$Decil[i]=2}
else{if(i<=9467811){Five$Decil[i]=3}
else{if(i<=12623748){Five$Decil[i]=4}
else{if(i<=15779685){Five$Decil[i]=5}
else{if(i<=18935622){Five$Decil[i]=6}
else{if(i<=22091559){Five$Decil[i]=7}
else{if(i<=25247496){Five$Decil[i]=8}
else{if(i<=28403433){Five$Decil[i]=9}
else{Five$Decil[i]=10}
}}}}}}}}}
for(i in 1:10){Two=filter(Five,Decil==i);
TotDecil$inctot[i]=sum(Two$income)}
rm(Five);rm(Three);rm(Two);gc()
我想知道您是否可以帮助我优化此代码;它花了几个小时仍然没有完成。
答案 0 :(得分:2)
ntile
包中的dplyr
函数效果更好:
Three <- Nal %>% select(income,factor)
Five <- data.frame(income=rep(Three$income,Three$factor))
Cinco$Decil <- ntile(Cinco$ing_cor,10)
# ^ This line works instead of that 'for' loop & it only takes seconds to run