Я новичок в R и мне нужно создать один фрейм данных из 80 файлов .xlsx, которые в основном имеют одинаковые столбцы и находятся в одной папке. Я хочу эффективно связать все эти файлы таким образом, чтобы они работали, если бы я позже добавил или удалил файлы из папки. Я хочу сделать это без преобразования файлов в .csv, если кто-то не может показать мне, как это эффективно для большого числа файлов в самой R.
Ранее я читал файлы по отдельности, используя read_excel
функция из пакета readxl. После этого я бы использовал rbind
, чтобы связать их. Это было хорошо для 10 файлов, но не для 80! Я экспериментировал со многими решениями, предлагаемыми онлайн, однако ни одно из них, похоже, не работает, в основном потому, что они используют функции, отличные от read_excel
, или форматы, отличные от .xlsx. Я не отслеживал многие из моих неудачных попыток, поэтому не могу предложить код, отличный от одного альтернативного метода, который я пытался адаптировать к read_excel
из функции read_csv
.
#Method 1
library(readxl)
library(purr)
library(dplyr)
library(tidyverse)
file.list <- list.files(pattern='*.xlsx')
alldata <- file.list %>%
map(read_excel) %>%
reduce(rbind)
#Output
New names:
* `` -> ...2
Error in rbind(deparse.level, ...) :
numbers of columns of arguments do not match
Любой код о том, как это сделать, будет принят с благодарностью. Извините, если что-то не так с этим постом, это мой первый.
ОБНОВЛЕНИЕ: Используя изменения, предложенные ответами, я сейчас использую код:
file.list <- list.files(pattern='*.xlsx')
alldata <- file.list %>%
map_dfr(read_excel) %>%
reduce(bind_rows)
Этот выводТеперь это выглядит следующим образом:
New names:
* `` -> ...2
Error: Column `10.Alert.alone` can't be converted from numeric to character
Это происходит независимо от того, какой тип функции bind()
я использую в слоте reduce()
. Если кто-то может помочь с этим, пожалуйста, дайте мне знать!