Связывание строк нескольких фреймов данных в один фрейм данных в R

У меня есть вектор путей к файлам, называемый dfs, и я хочу создать фрейм данных этих файлов и связать их вместе в один огромный фрейм данных, поэтому я сделал что-то вроде этого:

for (df in dfs){
  clean_df <- bind_rows(as.data.table(read.delim(df, header=T, sep="|")))
  return(clean_df)
} 

но возвращается только последний элемент в кадре данных. Как это исправить?


person santanDave    schedule 24.11.2020    source источник
comment
Чтобы прочитать несколько файлов, см. раздел stackoverflow.com/questions/11433432/   -  person zx8754    schedule 24.11.2020
comment
Затем, чтобы связать их, см. stackoverflow.com/q/2851327/680068.   -  person zx8754    schedule 24.11.2020


Ответы (2)


Я не уверен в вашем формате файла, поэтому я возьму в качестве примера обычный .csv. Замените часть a * i фактическим чтением всех различных файлов, а не просто созданием данных макета.

files = list()
for (i in 1:10) {
  a = read.csv('test.csv', header = FALSE)
  a = a * i
  files[[i]] = a
}


full_frame = data.frame(data.table::rbindlist(files))
person Shamis    schedule 24.11.2020

Проблема в том, что вы можете передавать только один файл за раз в функцию read.delim(). Таким образом, решением будет использование функции, такой как lapply(), для чтения в каждом файле, указанном в вашем df.

Вот пример, и вы можете найти другие ответы на свой вопрос здесь.

library(tidyverse)

df <- c("file1.txt","file2.txt")
all.files <- lapply(df,function(i){read.delim(i, header=T, sep="|")})
clean_df <- bind_rows(all.files)
(clean_df)

Обратите внимание, что вам не нужна функция return(), помещение clean_df в круглые скобки побуждает R напечатать переменную.

person Ava    schedule 24.11.2020