2017-06-07 79 views
0

我試圖通過循環運行多個年份的數據集,特別是2009到2014年,並且重命名變量以反映年份。例如,我從2009年起加載consolidated,並嘗試將$AGE09重命名爲$AGE。澄清:我希望能夠在2010年和2011年等這樣做 - 我希望能夠在所有年份循環運行consolidated.2009$AGE <- consolidated.2009$AGE09X,將2009年更改爲2010年,將09年更改爲10年等等。在R循環中運行不同的數據集

我很難搞清楚如何讓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

首先對您的問題談幾點看法: 當你調用rx_files [我]與我== 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)))) 
} 
+0

嗨,謝謝你,這是非常有益的。代碼現在正在運行,並按照希望重命名變量。爲了回答你以前的觀點,我編寫了一些代碼,使清單成爲清單中的第2009-第2014個元素,以簡化事情,但認爲它從我的問題中減損了。 – Scott

+0

非常好,請告訴我你是否需要我解釋一些行或者是否足夠好,然後考慮驗證答案:) –

+0

已驗證!再次感謝... – Scott