2016-07-13 5 views
1

У меня есть два (или более) списка из того же количества кадров данных и вы хотите объединить свои кадры данных из разных списков в одном списке. Таким образом, в качестве вывода я хочу получить один список из того же количества кадров данных, что и в каждом отдельном списке.объединить кадры данных из разных списков в одном списке

Звучит немного сложно, но в основном я хочу сделать это в расширяемой и более простой способ:

d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6)) 
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4)) 
l1 <- list(d1,d2) 
d3 <- data.frame(y1=c(11,22,33),y2=c(44,55,66)) 
d4 <- data.frame(y1=c(33,22,11),y2=c(66,55,44)) 
l2 <- list(d3,d4) 

new_d1 <- do.call(rbind,list(l1[[1]],l2[[1]])) 
new_d2 <- do.call(rbind,list(l1[[2]],l2[[2]])) 
output <- list(new_d1,new_d2) 

Вывод должен чем выглядеть следующим образом:

> output 
[[1]] 
y1 y2 
1 1 4 
2 2 5 
3 3 6 
4 11 44 
5 22 55 
6 33 66 

[[2]] 
y1 y2 
1 3 6 
2 2 5 
3 1 4 
4 33 66 
5 22 55 
6 11 44 

Кроме того, что функция может Я использую, если l1 и l2 уже сидят в списке сами?

Я уже смотрел lapply() и sapply(), но обе функции не подходят. На форумах я только нахожу решения для объединения списка кадров данных в одном кадре данных.

+2

'Карта (rbind, l1, l2)'? –

+0

@docendodiscimus Пожалуйста, разместите его как asnwer и закройте это. – akrun

+0

Я оставлю это вам, @akrun. Не стесняйтесь восстановить свой ответ - я не против, если вы добавите «Карта». Я считаю, что это дубликат в любом случае –

ответ

3

В простом случае l1 и l2, являющихся списков в глобальной среде, вы можете использовать

Map(rbind, l1, l2) 

Для другого случая, когда l1 и l2 уже сидят в list, вы можете использовать

l <- list(l1, l2) 
Reduce(function(...) Map(rbind, ...), l) 
+0

Работает как очарование! – moremo

Смежные вопросы