Я пытаюсь прочитать только хвост нескольких файлов .xlsx, объединенных в data.frame списков.

Я пытаюсь объединить несколько листов .xlsx в один файл данных в r, но извлекаю только последнюю строку каждого листа.

Я клинический академик, и в настоящее время у нас есть алгоритм прогнозирования, реализованный с помощью электронной таблицы Excel с поддержкой макросов. Эта электронная таблица с поддержкой макросов выводит лист .xlsx в предварительно указанную папку.

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

Мне удалось объединить все файлы, используя приведенный ниже код, в основном благодаря помощи/коду, который мне удалось найти в этом сообществе.

К сожалению, я застрял в следующем сообщении об ошибке. Смотри ниже

library(plyr)
library(dplyr)
library(readxl)

#file directory where the .xlsx files are to be listed below path <- "//c:/documents" 
filenames_list <- list.files(path= path, full.names=TRUE)

All_list <- lapply (filenames_list, 
               function(filename){
  print(paste("Merging",filename,sep = " "))
  read.xlsx(filename)
})

#this below code doesnt work 
#it returns the following error
# Error in x[seq.int(to = xlen, length.out = n)] : 
#  object of type 'S4' is not subsettable 
tail_only_list_df <- lapply (All_list,  
    function(newtail){
       tail(newtail, 1)
    })

final_df <- rbind.fill(tail_only_list_df)

person Charlie R    schedule 10.09.2019    source источник
comment
Этот вопрос был помечен как низкое качество. Вероятно, потому что это нелегко решить, не видя данных, которые его вызывают.   -  person Trenton McKinney    schedule 10.09.2019
comment
@Trenton_M спасибо за совет, в следующий раз я включу фиктивный набор данных.   -  person Charlie R    schedule 12.09.2019


Ответы (1)


Попробуйте сделать следующее:

df <- do.call(rbind, lapply(filenames_list, function(filename) 
                tail(openxlsx::read.xlsx(filename), 1)))

Или, если у вас уже есть список файлов Excel, сделайте

df <- do.call(rbind, lapply(All_list, tail, 1))
person Ronak Shah    schedule 10.09.2019