Rbind соответствующие элементы в двух или более списках в R - PullRequest
0 голосов
/ 11 октября 2018

У меня есть 3 списка, каждый с 500 элементами.Здесь для наглядности у меня есть 2 списка по 1 элементу в каждом:

structure(list(timeseries = c(1, 7, 59), t = c(1, 3, 7)), .Names = c("timeseries", "t"), row.names = c(NA, 3L), class = "data.frame")   

structure(list(timeseries = c(5, 6, 7), t = c(8, 9, 10)), .Names = c("timeseries", "t"), row.names = c(NA, 3L), class = "data.frame") 

Моя цель - привязать первый элемент в списке 1 к первому элементу в списках 2 и 3. Затем второй элемент всписок 1 со вторым элементом в списках 2 и 3. И т. д.

В моем примере я получу список этой формы

structure(list(timeseries = c(1,7,59,5, 6, 7), t = c(1,3,7,8, 9, 10)), .Names = c("timeseries", "t"), row.names = c(NA, 6L), class = "data.frame") 

Как мне это сделать?

Спасибо!

**** РЕДАКТИРОВАТЬ *** Улучшенный пример предполагаемого результата.У меня есть а и б.Я хочу получить C.

a<-list(structure(list(timeseries = c(1, 7, 59), t = c(1, 3, 7)), .Names = c("timeseries", "t"), row.names = c(NA, 3L), class = "data.frame"),
structure(list(timeseries = c(1, 7, 59), t = c(1, 3, 7)), .Names = c("timeseries", "t"), row.names = c(NA, 3L), class = "data.frame"))


b<-list(structure(list(timeseries = c(2, 3, 5), t = c(2, 4, 6)), .Names = c("timeseries", "t"), row.names = c(NA, 3L), class = "data.frame"),
        structure(list(timeseries = c(60, 70, 80), t = c(20, 30, 40)), .Names = c("timeseries", "t"), row.names = c(NA, 3L), class = "data.frame"))


c<-list(structure(list(timeseries = c(1, 7, 59, 2,3, 5), t = c(1, 3, 7, 2, 4, 6)), .Names = c("timeseries", "t"), row.names = c(NA, 6L), class = "data.frame"),
        structure(list(timeseries = c(1, 7, 59, 60, 70, 80), t = c(1, 3, 7, 20, 30, 40)), .Names = c("timeseries", "t"), row.names = c(NA, 6L), class = "data.frame"))

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Просто попробуйте функцию map2:

purrr::map2(a,b,rbind) -> d
identical(c,d)
# [1] TRUE
0 голосов
/ 11 октября 2018

Предполагая, что длина a и b одинаковы, мы можем сделать

lapply(seq_along(a), function(x) rbind(a[[x]], b[[x]]))

#[[1]]
#  timeseries t
#1          1 1
#2          7 3
#3         59 7
#4          2 2
#5          3 4
#6          5 6

#[[2]]
#  timeseries  t
#1          1  1
#2          7  3
#3         59  7
#4         60 20
#5         70 30
#6         80 40

seq_along создает последовательность от 1 до длины объекта.Если вы сделаете

seq_along(a) #you would get output as
#[1] 1 2

, так как length(a) равно 2. Итак, сначала мы rbind данных, один за другим rbind(a[[1]], b[[1]]), затем rbind(a[[2]], b[[2]]) и так далее.lapply обеспечивает окончательный вывод списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...