Есть ли функция R для объединения множества фреймов данных - PullRequest
0 голосов
/ 06 июля 2019

У меня есть выборка из 2 наборов данных (c и d).Я объединяю их, используя команду объединения

 c <- data.frame(x=c("a","b"),y=c("c","d"))
 d <- data.frame(x=c("f","g"),y=c("h","e"))
 library(gdata)
 combine(c,d)
  x y source
1 a c      c
2 b d      c
3 f h      d
4 g e      d

Хорошо.Предположим, у меня есть 100 данных, таких как c, d, e, f ..... и т. Д. (С одинаковыми столбцами).Есть ли способ быстро объединить все это?Или же мне нужно позвонить ниже команды

 combine(c,d,e,f........) 

 df <- read.csv(file.choose())
 combine(df)

И выше очень много времени.Есть ли альтернатива, позволяющая легко комбинировать все кадры данных

Ответы [ 2 ]

3 голосов
/ 06 июля 2019

Вы можете перечислить все файлы, которые вы хотите прочитать в каталоге, используя это:

listoffiles <- list.files(pattern = ".csv")

Затем выполните цикл по всем файлам и assign это имя переменной с df_.

for(i in 1:length(listoffiles)) {
   assign(paste0("df_", i), read.csv2(listoffiles[i]))
}

Затем выполните поиск всех файлов в вашей глобальной среде.Затем вы можете указать шаблон поиска, который будет "df_" и приведет к списку data.frames.

dflist <- mget(ls(.GlobalEnv, pattern = "df_"), envir = .GlobalEnv)

Затем используйте rbindlist из data.table для объединения ваших data.frames.

> data.table::rbindlist(dflist)
   x y
1: a c
2: b d
3: f h
4: g e
1 голос
/ 07 июля 2019

Если я правильно понимаю вопрос, то у ОП есть имена фреймов данных в символьном векторе, но сами фреймы данных являются едиными объектами в глобальной среде.В этом случае я бы предложил следующее.

Пусть это будут данные и символьный вектор:

 c <- data.frame(x=c("a","b"),y=c("c","d"), stringsAsFactors = FALSE)
 d <- data.frame(x=c("f","g"),y=c("h","e"), stringsAsFactors = FALSE)
 e <- data.frame(x=c("x","y"),y=c("o","p"), stringsAsFactors = FALSE)

 df_names <- c("c", "d","e")

Тогда dplyr :: bind_rows с c (mget (...)) долженсделай работу.

library(dplyr)   
bind_rows(c(mget(df_names)), .id = "source") 

> source x y
1      c a c
2      c b d
3      d f h
4      d g e
5      e x o
6      e y p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...