2015-10-11 42 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