针对rep函数的R代码优化

时间:2015-07-16 20:40:49

标签: r statistics analytics

我正在处理每次民意调查的收入/支出数据。 来自样本数据库的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()

我想知道您是否可以帮助我优化此代码;它花了几个小时仍然没有完成。

1 个答案:

答案 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