Объединить / фреймы данных в списках

#r #list #dataframe #rbind

#r #Список #фрейм данных #rbind

Вопрос:

Я пытаюсь объединить фреймы данных с одинаковыми именами между двумя списками фреймов данных, используя rbind или аналогичные. Фоном является то, что пользователь импортирует файлы, содержащие данные для 130 различных соединений, в виде уникальных фреймов данных, поэтому в каждом импортированном файле данных есть список из 130 фреймов данных. Файлы данных импортируются в виде списка, поэтому существует список файлов данных, содержащих списки фреймов данных.

Имена соединений / фреймов данных остаются неизменными изо дня в день, но количество импортируемых файлов зависит от предпочтений пользователя.

Я хотел бы rbind объединить фреймы данных с помощью соединения. Вот воспроизводимый пример, который делает то, что я хочу.

 list.of.lists <- list(
        df.list1 <- list(df1 = data.frame("ID" = letters[1:10],
                                          "Data" = rnorm(10, 5, 2)),
                         df2 = data.frame("ID" = letters[1:10],
                                          "Data" = rnorm(10, 5, 2))
                         
        ),
        df.list2 <- list(df1 = data.frame("ID" = letters[11:20],
                                          "Data" = rnorm(10, 5, 2)),
                         df2 = data.frame("ID" = letters[11:20],
                                          "Data" = rnorm(10, 10, 2))
        )
)

j <- Map(rbind, list.of.lists[[1]], list.of.lists[[2]]) # Results in a list of data frames (df1, df2)
  

Это генерирует список из 2 фреймов данных с 20 результатами в каждом, именно то, что я хочу, но при применении к реальному миру я не знаю, сколько списков будет содержаться в list.of.lists .

Я подозреваю, что ответ относительно прост, но я немного застрял. Помощь очень ценится!

Комментарии:

1. do.call(function(...) Map(rbind, ...), list.of.lists)

2. Это именно то, что я хочу! Сохраняет все имена dfs без изменений и все остальное. Напомните мне, что в этом случае делает синтаксис ellipse (…)? Пожалуйста, сделайте это в качестве ответа, чтобы я мог его выбрать.

Ответ №1:

Я подозреваю, что вы ищете функцию do.call : ‘

 lapply(list.of.lists, function(x){
  do.call(what = rbind, x)
})
  

Комментарии:

1. Это приводит к потере имен «df». Я могу обернуть это в функцию setNames(), но предпочел бы не делать этого, если это возможно.