2013-08-25 27 views
1

我使用的變量列表下載和創建R. dataframes我想能夠使用此列表,在每個數據幀的變化不同的列多dataframes列,但我無法使用變量列表調用特定的列。使用列表改變中的R

countries= c("USA","CHN") 

for (i in 1:length(countries)){ 
    download.file(url[i],savedata[i]) 
    assign(countries[i],xmlToDataFrame(savedata[i])) 
} 

現在我有dataframes看起來像這樣的:

head(USA) 
     indicator  country date   value decimal 
1 GDP (current US$) United States 2012 15684800000000  0 
2 GDP (current US$) United States 2011 14991300000000  0 
3 GDP (current US$) United States 2010 14419400000000  0 
4 GDP (current US$) United States 2009 13898300000000  0 
5 GDP (current US$) United States 2008 14219300000000  0 
6 GDP (current US$) United States 2007 13961800000000  0 

而且我想經歷和做一些修改,如與as.date()功能格式化日期列,或更改單位的價值列,但我希望能夠做到這兩個數據幀相同(或任意數字的情況下,我增加了國家的長度。

但是,每當我嘗試這樣做,我似乎可以使用ge的國家/地區列表在每個數據框內't'。我最初的猜測是把這樣的事情在一個循環:

assign(paste(countries[i],"date",sep="$"), 
    as.date(get(paste(countries[i],"date",sep="$"))) 

特別是,我感到困惑,如果我不是想怎麼get(paste(countries[i]))作品獲得特定列日期,以及如何paste(countries[i],"date",sep="$")打印正確的名稱,但我似乎無法得到我想操縱的那一列。

此外,我意識到循環是不這樣做的理想方式,但我一直有與應用功能同樣的問題,雖然我可能與他們有麻煩,由於我缺乏經驗。對於如何在循環中進行或不進行的建議,我們將非常感激。超級R新手在這裏,只是想學習。另外,如果你遇到一個明確的解釋/回答這個別的地方,我會很感激你指着我朝它。

+0

您可能會發現更容易壓扁該結構將所有數據放入單個數據幀中。從@Ferdinand答案是使用數據幀列表下面你可以與命令數據幀堆疊起來的所有'減少(rbind,MYLIST)'。一旦你有一個數據幀只,格式化操作變得更加容易。 –

回答

1

,如果你使用列表要容易得多。開始用空:

mylist = list() 

然後改變這:

assign(countries[i],xmlToDataFrame(savedata[i])) 

這樣:

mylist[[i]] <- xmlToDataFrame(savedata[i]) 

然後作出這樣做你的格式化功能,例如:

f <- function(df){ 
    within(df, date <- as.date(date)) 
} 

並使用lapply將其應用到所有dataframes:

mylist2 <- lapply(mylist, f) 

如果你想通過名稱來訪問dataframes,使用此:

names(mylist2) <- countries 

和測試:

mylist2[["USA"]] 
+0

這對於理解如何使用列表和應用函數以及將注意力集中在內部函數中都非常有幫助和內容豐富。我認爲我最終遇到了一些麻煩,但這是我自己的困惑,這個工作很好,而且很有教育意義。謝謝。 – DaedalusBloom