Извлечение данных из нескольких файлов Excel с помощью R

#r #excel #extract

#r #excel #извлечение

Вопрос:

У меня есть много файлов Excel в папке, которая имеет аналогичную структуру: введите описание изображения здесь

Я хотел бы вывести его на что-то вроде этого: введите описание изображения здесь

Это то, что я пробовал. Хотя я могу извлечь диапазон ячеек в B15: G17, как я могу добавить ячейку B8 в столбец? Кроме того, возможно ли использовать строку 10 в качестве заголовка столбца?

 library("readxl")

file.list <- list.files(path=".", pattern=".xlsx")

df.list <- lapply(file.list, read_excel, sheet=1, range=("B15:G17"), col_names=FALSE, col_types = NULL)
df <- data.frame(df.list)
  

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

1. Вы можете использовать skip аргумент, чтобы пропустить строки от 1 до 9

Ответ №1:

Параметр read.xlsx from openxlsx немного более гибкий, поскольку мы можем указать rows/cols аргумент для чтения конкретной ячейки, а также использовать startRow для указания начальной строки

 library(openxlsx)
lst1 <- lapply(file.list, function(x) read.xlsx(x, sheet = 1, startRow = 10, cols = 3:6, rows = 15:17))
  

Кроме того, прочитайте конкретную ячейку отдельно, а затем привяжите ее как новый столбец ‘ID’ в каждом наборе list данных с Map помощью и cbind

 lst2 <- lapply(file.list, function(x) setNames(read.xlsx(x, sheet = 1,
       rows = 8, cols = 2), 'ID'))

Map(cbind, ID = lst2, lst1) 
  

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

1. такая работа, но как мне добавить содержимое в ячейку B8 в качестве нового столбца? И почему-то заголовок столбца не появился

2. @Jane Что касается имен столбцов, по умолчанию colNames = TRUE и If TRUE, the first row of data will be used as column names , поэтому, если строка имени столбца находится в 10-й строке, вы можете изменить rows = 10:17

3. для имен столбцов я попробовал colNames = TRUE и даже включил fillMergedCells = TRUE , но почему-то он не работает.

4. Что касается части идентификатора, я столкнулся со следующей ошибкой для lst2 Error in names(object) <- nm : attempt to set an attribute on NULL In addition: Warning message: No data found on worksheet. Вероятно, в некоторых файлах отсутствует идентификатор?

5. @Джейн. Можете ли вы проверить lapply(lst1, dim) . Может быть, некоторые файлы не читаются?