【发布时间】:2020-07-06 02:36:06
【问题描述】:
我的目标是自动化巴西家庭调查中的一些数据实现和分析。为此,第一步是创建一个函数,用于下载和绑定多个版本的住户调查。 好处是我已经有一个下载不同版本的家庭调查的功能。它被称为“PNADcIBGE::get_pnadc”。此函数获取参数“年”和“季度”。所以,做这件事的路很长:
install.package("PNADcIBGE")
library(PNADcIBGE)
pnad_2012_1 <- get_pnadc(year = 2012, quarter = 1)
pnad_2012_2 <- get_pnadc(year = 2012, quarter = 2)
pnad_2012_3 <- get_pnadc(year = 2012, quarter = 3)
pnad_2012_4 <- get_pnadc(year = 2012, quarter = 4)
pnad_2013_1 <- get_pnadc(year = 2012, quarter = 1)
这段代码会继续......直到year = 2020 and quarter = 1。
加载所有数据并相应命名后,我想对它们进行行绑定:
pnad_final <- rbind(pnad_2012_1, pnad_2012_2, ...., pnad_2020_1)
我不知道如何在 R 中做到这一点,我试过了:
PCC <- function(a, t) {
for (i in 2012:a-1){
for(j in 1:4){
Pnadc_i_j <- get_pnadc(year = i , quarter = j)
}
}
for(k in 1:t){
Pnadc_a_k <- get_pnadc(year = a, quarter = k)
}
}
PCC(2020, 1)
然后我得到错误:
Error in get_pnadc(year = i, quarter = j) : Year must be greater or equal to 2012.
我以为我已将 i 初始值设置为 2012,但显然我没有。
我是 R 新手,但我可以通过以下方式在 SAS 中做同样的事情:
%macro PCC(a, t);
%do i=2012 %to %eval(&a.-1);
%do j=1 %to 4;
proc import datafile="H:\IBGE\pnadc_&i._&j..csv"
out=pnadc_&i._&j.
dbms=csv
replace;
%end;
%end;
%do k=1 %to &t.;
proc import datafile="H:\IBGE\pnadc_&a._&k..csv"
out=pnadc_&a._&k.
dbms=csv
replace;
%end;
%mend;
%PCC(2020, 1);
/*And finally, the row-bind is super easy*/
data pnad_final;
set pnadc_20:;
run;
关于如何在 R 中获得类似内容的任何想法?
【问题讨论】:
-
pnad_2012_1属于list类,包含大量信息。您是否要提取其中一个元素和rbind那些? -
嗨罗纳克沙阿,感谢您的评论。根据我的教程(仅限葡萄牙语) pnad_2012_1 应该是
survey.design对象。是的,有很多信息。可能我会进一步只选择它的一些列。但你是对的。我希望它们应该有大约 300k 行和大约 100 列。 -
我只能选择几个变量来使其更小: Pnadc_2012_1