#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(), но предпочел бы не делать этого, если это возможно.