为 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
我正在处理来自 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