R- чтение файлов Excel с циклом и создание фреймов данных - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть куча файлов (число постоянно растет), каждый файл должен получить отдельный фрейм данных.

Чтобы упростить чтение, я хотел бы использовать цикл для чтения всех файлов. Новые фреймы данных должны быть названы в честь строки из «Имя файла»

В последней строке я хотел бы создать фрейм данных, имя нового фрейма данных должно быть содержимым "Filename".

for(x in 1:nrow(Namen)) # creation of the loop

{

  Filename<- Namen[x,1] #Takes the Filename from the the DF

  einlesepfad <- "path for reading the xlsm files" 
   einlesepfad <- paste(einlesepfad,Filename,".xlsm", sep="") # creation of the path to read the xlsm file
   Filename <- read_excel(einlesepfad) #The Content of "Filename" should be the Name of the new data frame
}

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Если я правильно понимаю, вы хотите прочитать много файлов из списка в отдельные кадры данных?Я предлагаю немного другое решение:

results <- list()
for(x in 1:nrow(Namen)) # creation of the loop
{
  Filename<- Namen[x,1] #Takes the Filename from the the DF

  einlesepfad <- "path for reading the xlsm files" 
  einlesepfad <- paste(einlesepfad,Filename,".xlsm", sep="") # creation of the path to read the xlsm file
  results[Filename] <- read_excel(einlesepfad) # The list gets a new item, named whatever value Filename had, that contains your data
}

Таким образом, каждый из ваших файлов находится в отдельном фрейме данных , и все фреймы данных находятся в одном списке - results.Чтобы получить доступ к фрейму данных из файла "datafile1.xlsm", сделайте следующее:

results['datafile1']

или даже

results$datafile1

То, что вы пытались сделать ранее, - это дали отдельную переменную для каждого фрейма данных - возможно (вы могли бы создать операторы с помощью paste, а затем eval их, я думаю), но список фреймов данных почти всегда лучше.

0 голосов
/ 07 сентября 2018

Используя ваши пакеты и пример, вы можете сделать следующее:

Передать имена файлов в списке:

Namen <- list(c('fname1', 'fname2') # your names list (i am guessing without .xlsx)
einlesepfad <- "path for reading the xlsm files"

Вставить каждый файл в фрейм данных

df.list <- list() #empty data frame list
df.list= lapply(Namen, function(i){
  fname <- paste0(einlesepfad, i, '.xlsm') # get the full filename
  x = read_excel(fname) # read the excel file in
  # Edit: Removed the name column part
  # Return your data
  return (x)
})

Edit:
Только что увидел ваши правки с запросом именованного списка по элементам. Вот очень быстрое (не элегантное) решение для добавления имен:

names(df.list) <- lapply(Namen, function(x){x})

После этого вы можете получить доступ к каждому фрейму данных списка либо df.list['name'] или по индексу df.list[1]

Edit2:
Кроме того, поскольку я заметил, что вы говорите, что список имен ваших файлов постоянно растет, при условии, что вы храните все файлы в одном и том же каталоге, вы можете сделать следующее:

Namen <– list.files(einlesepfad, '*.xlsm') 

и просто не забудьте изменить имя fname внутри функции и удалить часть «.xlsm» следующим образом:

fname <- paste0(einlesepfad, i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...