2014-03-13 47 views
0

我想通過API函數爲一系列國家/地區導入幾個時間序列變量。我想將數據存儲在每個國家的單獨陣列中。數據數組的名稱應該是3個字母的國家代碼。對於一個國家我的代碼如下所示:我想在循環內創建一組數據並根據變量列表進行命名

data = Quandl(c(var1,var2,var3), collapse="annual") 

我通過國家的名單還包含標識符從Quandl.com下載var1-3要循環。我的問題是,我無法找到一種方法來爲每個國家使用相應的國家/地區代碼(例如美國)重命名數據數組(數據)。最後,我希望在工作區(POL,DEU,USA,CHN ...)的每個國家/地區都有單獨的數據陣列。

基本上,我正在尋找一種功能性的方式來做到這一點:

list[i,1] = data 

不幸的是,這是行不通的,但爲什麼沒有一個簡單的方法來重命名一個循環內的數據陣列?

回答

1

您可以使用lapply創建數據列表,然後使用國家代碼重命名列表中的每個元素。

countries<-c("a","b","c") 
dat<-lapply(countries,function(x) rnorm(4)) 
names(dat)<-countries 
> dat[["a"]] 
[1] -0.5157099 -1.0372721 0.9696698 -0.9280852 

你不會有一個變量命名POL或美國,但你有一個列表,從中可以提取相關數據幀。我認爲這可能是比爲每個國家創建變量更清潔的解決方案。

你可以尋找到的應用功能(applymapplysapplylapply等)大概一個做掉你的循環。考慮以下幾點: 外lapply進行全面走高國家級「循環」的功能,而內部mapply執行鍼對單一國家一組給定的各種參數的操作

countries<-c("a","b","c") 
arg1<-1:3 
arg2<-10*1:3 
dat<-mapply(data.frame(c1=x,c2=rnorm(1)*vars),vars,x,SIMPLIFY=F)) 
names(dat)<-countries 


dat<-lapply(countries, function(x) 
      do.call(rbind, 
        mapply(function(x,y,z) data.frame(country=x,c1=rnorm(2)*y,c2=rnorm(2)*z), 
         x=x,y=arg1,z=arg2,SIMPLIFY=F))) 

如果仍要堅持你的for循環,然後創建一個列表,並添加到它並重命名爲

result<-list() 
for(i in 1:50) result[[i]]<-YOURFUNCTIONHERE 
names(result)<-countryNames 
+0

謝謝,但我不知道這將如何配合我的循環結構。也許我應該更清楚地解釋一下,每個var1-3有不同的ID碼,差異超出了國家標識符。還有其他建議嗎? – aciM

+0

我明白了。我會編輯我的回覆。我得到的是,你並不需要一個for循環。大多數情況下,您應該儘量避免使用支持向量操作的語言進行循環。 – JPC

+0

我知道這樣會更優雅,但我真的不確定這可以與我需要調用的API函數一起工作。我已經在這裏重寫我的問題:http://stackoverflow.com/questions/22388404/r-how-to-rename-a-dataframe-within-a-for-loop – aciM

相關問題