2015-10-11 37 views
0

我有一個包含10個元素(股票1..10)每個看起來像這樣的列表data如何合併列表中的幀?

test <- data$Stock1 
> head(test) 
    names date_tmp efficiency 
1 Stock1 2010-11-04 0.5674100 
11 Stock1 2010-11-05 0.2945661 
21 Stock1 2010-11-08 0.6318756 
31 Stock1 2010-11-09 0.3203930 
41 Stock1 2010-11-10 0.8075944 
51 Stock1 2010-11-11 1.0000000 

我要合併在此列表中的所有幀的列。我有以下的代碼,我適應從別的地方:

new_frame <- do.call(cbind,Map(cbind, lapply(data, as.data.frame))) 

我的問題是,最終的結果看起來很凌亂:

Stock1.names Stock1.date_tmp Stock1.efficiency Stock10.names Stock10.date_tmp Stock10.efficiency Stock2.names 
1  Stock1  2010-11-04   0.5674100  Stock10  2010-11-04   1.0000000  Stock2 
11  Stock1  2010-11-05   0.2945661  Stock10  2010-11-05   1.0000000  Stock2 
21  Stock1  2010-11-08   0.6318756  Stock10  2010-11-08   1.0000000  Stock2 
31  Stock1  2010-11-09   0.3203930  Stock10  2010-11-09   1.0000000  Stock2 
41  Stock1  2010-11-10   0.8075944  Stock10  2010-11-10   0.0000000  Stock2 
51  Stock1  2010-11-11   1.0000000  Stock10  2010-11-11   0.8065724  Stock2 
    Stock2.date_tmp Stock2.efficiency Stock3.names Stock3.date_tmp Stock3.efficiency Stock4.names Stock4.date_tmp 
1  2010-11-04     1  Stock3  2010-11-04     1  Stock4  2010-11-04 
11  2010-11-05     1  Stock3  2010-11-05     0  Stock4  2010-11-05 
21  2010-11-08     1  Stock3  2010-11-08     1  Stock4  2010-11-08 
31  2010-11-09     0  Stock3  2010-11-09     1  Stock4  2010-11-09 
41  2010-11-10     1  Stock3  2010-11-10     1  Stock4  2010-11-10 
51  2010-11-11     1  Stock3  2010-11-11     1  Stock4  2010-11-11 
    Stock4.efficiency Stock5.names Stock5.date_tmp Stock5.efficiency Stock6.names Stock6.date_tmp 
1     1  Stock5  2010-11-04   0.5218197  Stock6  2010-11-04 
11     1  Stock5  2010-11-05   0.6762827  Stock6  2010-11-05 
21     1  Stock5  2010-11-08   0.7991099  Stock6  2010-11-08 
31     1  Stock5  2010-11-09   0.5613898  Stock6  2010-11-09 
41     1  Stock5  2010-11-10   0.5531570  Stock6  2010-11-10 
51     1  Stock5  2010-11-11   0.8151261  Stock6  2010-11-11 
    Stock6.efficiency Stock7.names Stock7.date_tmp Stock7.efficiency Stock8.names Stock8.date_tmp 
1   0.5498426  Stock7  2010-11-04     1  Stock8  2010-11-04 
11   0.5534652  Stock7  2010-11-05     1  Stock8  2010-11-05 
21   0.3897874  Stock7  2010-11-08     1  Stock8  2010-11-08 
31   0.4405610  Stock7  2010-11-09     1  Stock8  2010-11-09 
41   0.8180463  Stock7  2010-11-10     1  Stock8  2010-11-10 
51   0.1491688  Stock7  2010-11-11     1  Stock8  2010-11-11 
    Stock8.efficiency Stock9.names Stock9.date_tmp Stock9.efficiency 
1     0  Stock9  2010-11-04   0.2756548 
11     1  Stock9  2010-11-05   0.5204240 
21     1  Stock9  2010-11-08   0.0000000 
31     1  Stock9  2010-11-09   0.7940347 
41     1  Stock9  2010-11-10   0.6393697 
51     1  Stock9  2010-11-11   0.0000000 
> 

我想只有1包含列日期和得分效率排命名爲「Stock1 ... 10」。我認爲從上面發佈的循環函數中做到這一點更有效,而不是試圖從新數據框中刪除額外的東西。任何幫助表示讚賞

+1

是[這](http://stackoverflow.com/問題/ 8091303 /同時合併多個數據幀的列表)是你想要的?幾乎是第一次在你的頭銜中擊中Google。 –

+1

也許'library(data.table); dcast(rbindlist(data),date_tmp〜names,value.var ='efficiency')' – akrun

+0

謝謝。正是我所期待的 –

回答

0

試試看rbind代替:

new_frame <- data.frame(do.call(rbind,data),row.names = NULL) 

你會得到這樣的事情:

> new_frame 
    names date_tmp efficiency 
1 Stock1 2013-01-01 0.5450818 
2 Stock1 2013-01-01 0.6710206 
... 
9 Stock1 2013-01-01 0.5147114 
... 
18 Stock2 2013-02-01 0.6650112 
19 Stock3 2013-03-01 0.6624025