For-Loop читает и сохраняет несколько файлов .xlsx в один файл

Я перебираю несколько файлов, где каждый файл создает таблицу. Я хотел бы сохранить каждую таблицу в файл, чтобы у меня были все таблицы вместе. Идея состоит в том, что после запуска каждого файла окончательный вывод будет добавляться к предыдущему конечному выводу в таблице. Мой текущий код перебирает каждый файл, но берет данные только из последнего файла в папке и многократно добавляет к одному и тому же выводу. Вот мой код:

filenames <- Sys.glob("*.xlsx")
print(filenames)

final.df<-data.table()
for(i in 1:length(filenames)) {
   #... final table named "Stats"

   Stats$file <- i   #To view which file is listed
   df <- data.table(Stats)
   final.df <- rbind(final.df, df)
   drop(df)
}

Когда я запускаю код, имена файлов печатаются 26 раз в таком формате:

[1] "file1.xlsx"          "file2.xlsx"
[1] "file1.xlsx"          "file2.xlsx"
[1] "file1.xlsx"          "file2.xlsx"
...

Мой текущий вывод печатается в этом формате:

X        Y        Z       File
1        10       2       file2
2        6        2       file2
1        9        2       file2
1        10       2       file2
2        6        2       file2
1        9        2       file2

Мой желаемый результат будет выглядеть следующим образом:

X        Y        Z       File
0        4        1       file1
1        7        1       file1
0        1        1       file1
1        10       2       file2
2        6        2       file2
1        9        2       file2

РЕШЕНИЕ

files <- list.files(pattern = "\\.xlsx$")
print(files)

final.df<-list() 

for(title in c(paste(files, sep="."))) {
   #... (Some data named Stats)
   Stats<-data.table(Stats)
   final.df[[title]] <- Stats
   print(final.df)
 }
 Final <- rbindlist(final.df)

person SoccerAnalytics26    schedule 13.11.2017    source источник
comment
На это, вероятно, ответили и дублируют. Проверьте это stackoverflow.com/questions/24819433/   -  person user5249203    schedule 13.11.2017
comment
Еще немного вдохновения: stackoverflow.com/q/32888757/2204410   -  person Jaap    schedule 13.11.2017
comment
Я знаю, как читать каждый отдельный файл, я хочу добавить вывод, который я получаю после прочтения файла. Я считаю, что эти решения добавляют исходные файлы вместе, а это не совсем то, что я ищу.   -  person SoccerAnalytics26    schedule 13.11.2017


Ответы (1)


Без ваших данных, я думаю, это должно работать:

listOut <- list()
for(i in 1:length(filenames)) {
  df <- data.table(filenames[i])
  listOut[[i]] <- df
}

dfFinal <- rbindlist(listOut)

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

person IanK    schedule 13.11.2017
comment
Этот ответ имеет смысл, но мой вывод по-прежнему берет последний файл в моей папке и добавляет повторяющийся результат. - person SoccerAnalytics26; 13.11.2017
comment
Да, мне трудно представить это, не видя данных. Я сделал правку выше. Если это не сработает, можете ли вы поделиться файлами где-нибудь? - person IanK; 14.11.2017
comment
Мне пришлось сделать что-то немного другое с линией петли, но в остальном это было отличное решение. - person SoccerAnalytics26; 14.11.2017