在R中的循环中运行不同的数据集

时间:2017-06-07 16:52:43

标签: r database loops variables for-loop

我试图通过循环运行多年的数据集,特别是2009年到2014年,并重命名变量以反映年份。例如,我从2009年开始加载consolidated,并尝试将$AGE09重命名为$AGE。澄清:我希望能够在2010年,2011年等基础上实现这一目标 - 我希望能够在所有年份中循环运行consolidated.2009$AGE <- consolidated.2009$AGE09X,将2009年更改为2010年,将09更改为10等。

我很难找出如何让R加载一年的数据,重命名变量,以及在循环中做其他事情。

rx_files <- as.list(dir(pattern="* - rx.rda"))
consolidated_files <- as.list(dir(pattern="* - consolidated.rda"))
   for(i in c(2009:2014)){                                                             
     load(rx_files[[i]])
     load(consolidated_files[[i]])
     rx.[[i]] <- rx.[[i]]
     consolidated.[[i]] <- consolidated.[[i]]
     consolidated.2009$AGE <- consolidated.2009$AGE09X
     #I attempted to run the above code in the loop using the below code
     consolidated.[[i]]$AGE <- consolidated.[[i]]$AGE*X
   }

我不断遇到错误,其中R不会将rx.[[i]]consolidated.[[i]]识别为合法对象。这是一个难以解释的问题,希望这里有人可以提供帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

首先就您的问题发表一些评论: 当你用i == 2009调用rx_files [[i]]时,你正在寻找该列表的第2009个元素,我怀疑这个列表是从第1年开始的,所以你可能不会在2009年做到这一点如此。

当你执行rx。[[i]]时,你似乎正在尝试连接诸如rx.2009之类的名称。它没有这样工作,[[用于列表rx。不是清单。

请尝试这个并让我知道它是否是您想要的,然后我可以编辑解释。

library(data.table) # to use the function setnames, execute install.packages("data.table") if you don't have it
rx_files <- as.list(dir(pattern="* - rx.rda"))
consolidated_files <- as.list(dir(pattern="* - consolidated.rda"))
#supposing all these files start with a clean year (4 numeric characters) and that there's only one file per year and filetype
years_rx <- as.numeric(substr(rx_files,1,4)
years_cf <- as.numeric(substr(consolidated_files,1,4)
for(i in c(2009:2014)){                                                             
  load(rx_files[[which(years_rx == i)]]) # not used actually, why do you load it ?
  load(consolidated_files[[which(years_cf == i)]])
  eval(parse(text=sprintf("setnames(consolidated.%s,'AGE%sX','AGE')",i,substr(i,3,4))))
}