为 rep 函数优化的 R 代码

R code optimizing for rep function

我正在处理来自 income/expense 每个家庭民意调查的数据。 样本数据库中的 9,002 个观测值通过这样的扩展因子代表 3,155,937 个家庭。

Homeid    Income    Factor
001       23456     678
002       42578     1073
..        ..        ..
9002      62333     987

我试图通过将每个收入值乘以其因子得到一个精确的每十分位数总收入摘要,结果将得到 3,155,937 观察向量,然后我使用 'for' 循环为每个值分配它所属的 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()

我想知道你能不能帮我优化这段代码;花了好几个小时,还没完成。

dplyr 包中的 ntile 函数效果更好:

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