我试图通过循环运行多年的数据集,特别是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]]
识别为合法对象。这是一个难以解释的问题,希望这里有人可以提供帮助。
谢谢。
答案 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))))
}