r语言 - 如何创建以函数参数命名的对象并全部 rbind 它们?



我的目标是自动化巴西家庭调查的一些数据实现和分析。为此,第一步是创建一个函数,用于下载和绑定多个版本的住户调查。 好的一点是,我已经有一个功能可以下载单独版本的家庭调查。它被称为"PNADcIBGE::get_pnadc"。此函数获取参数"year"和"quarter"。因此,漫长的路要走:

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:IBGEpnadc_&i._&j..csv"
out=pnadc_&i._&j.
dbms=csv
replace;
%end;
%end;
%do k=1 %to &t.;
proc import datafile="H:IBGEpnadc_&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 中获得类似内容的任何想法?

问题在于运算符优先级。您在for (i in 2012:a-1)中缺少一些括号。它应该是for (i in 2012:(a-1)(。您编写它的方式创建了从 2012 到a的向量,然后从每个元素中减去 1,因为:运算符的优先级高于-。这使得i的第一个值为 2011,从而产生该错误。

例:

a <- 2020
2012:a-1
# [1] 2011 2012 2013 2014 2015 2016 2017 2018 2019
2012:(a-1)
# [1] 2012 2013 2014 2015 2016 2017 2018 2019

您可以使用expand.grid创建所有数据组合,并使用lapplyget_pnadc函数应用于每个组合。

library(PNADcIBGE)
data <- expand.grid(year = 2012:2019, quarter = 1:4)
all_data <- lapply(seq(nrow(data)), function(i) 
get_pnadc(year = data$year[i], y = data$quarter[i]))

all_data将是survey.design对象的列表。您可以根据需要仅提取其中的相关部分。例如,您只能从每个数据帧中提取variable并将它们合并到一个数据帧中。

new_data <- do.call(rbind, lapply(all_data, `[[`, 'variables'))

相关内容

  • 没有找到相关文章

最新更新