2015-10-11 3 views
0

У меня есть список data, который содержит 10 элементов (приклад 1..10) каждый ищет, как это:Как объединить кадры в списке?

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 
> 

Я хотел бы только один столбец, содержащий даты и строки оценок эффективности названный просто «Stock1 ... 10». Я думаю, что есть более эффективный способ сделать это из функции цикла, указанной выше, вместо того, чтобы пытаться удалить лишний материал из нового фреймворка. Любая помощь приветствуется

+1

Is [это] (http://stackoverflow.com/ вопросы/8091303/both-merge-multiple-data-frames-in-a-list) - это то, что вы хотите? В значительной степени первый хит 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 
Смежные вопросы