В папке у меня есть 24 * .csv-файлы, они имеют одинаковую структуру, и я хочу создать один файл. Проблема в том, что не все кадры данных считываются одинаково, потому что для некоторых файлов параметр sep является «,» и для других «;». Какой подход следует использовать? Вероятно, я могу поставить if-statement.Чтение нескольких текстовых файлов в r без одного и того же разделителя
ответ
Вы можете проверить первую строку фрейма данных, чтобы увидеть, если он имеет запятую или точку с запятой в качестве разделителя, и после вызова IfElse заявление:
L <- readLines('DataFrame', n = 1)
if (grepl(";", L)) read.csv2("DataFrame") else read.csv("DataFrame")
Следующий простой код сделал работу, и очень быстро ,
library(dplyr)
library(data.table)
files <- list.files(path = "Ariel/Trips/", full.names = T)
f <- list()
for (i in 1:length(files)) {
f[[i]] <- fread(files[i], header = T, colClasses = c("factor", "factor", "factor", "factor",
"factor", "factor", "factor", "factor",
"factor", "factor", "factor", "factor",
"factor", "integer", "integer", "integer",
"factor", "numeric", "numeric", "integer",
"factor", "factor", "factor", "factor",
"factor", "factor", "factor", "factor"))
}
trip <- bind_rows(f)
fwrite(x = trip, file = "trip.csv", quote = T, na = NA, row.names = F)
Если вы планируете делать больше с data.frames, чем просто переписывать их в новый файл, 'fread' создает по умолчанию таблицу data.table, которая подмножества по-разному; если это вызывает беспокойство, используйте параметр 'data.table = FALSE'. Вы также можете использовать 'data.table :: rbindlist' вместо' dplyr :: bind_rows', если хотите использовать меньшее количество пакетов. Кроме того, 'lapply', скорее всего, будет быстрее, чем цикл' for', поскольку по умолчанию он предварительно выделяет память. – alistaire
* ... какие подмножества по-разному .. * довольно расплывчато .. также недавно это поведение было исправлено (по большей части) .. где можно использовать DT [, cols], чтобы вести себя как DF (предполагая 'cols' не существует в DT), или 'DT [, ..cols]', чтобы искать 'cols' (который является символом char/integer имен столбцов/индексов) вне области' DT'. См. [Пункт 2 в разделе v1.10.0 и пункт 1 под v1.9.8] (https://github.com/Rdatatable/data.table/blob/master/NEWS.md). – Arun
- 1. Чтение нескольких текстовых файлов
- 2. Чтение нескольких текстовых файлов java
- 3. Чтение одного и того же файла несколько раз в Python
- 4. Импорт нескольких линий одного и того же наблюдения в R
- 5. Чтение нескольких файлов в R
- 6. Чтение нескольких текстовых файлов в Java
- 7. C# Чтение нескольких файлов и запись одного
- 8. Выделение одного и того же разделителя для RDD в Spark
- 9. пакетное переименование нескольких файлов одного и того же расширения
- 10. Чтение и запись текстовых файлов
- 11. Чтение данных из нескольких текстовых файлов
- 12. Чтение текстовых файлов в Lua
- 13. R Программирование, чтение и запуск нескольких файлов
- 14. Чтение содержимого из нескольких текстовых файлов
- 15. C чтение текстовых файлов
- 16. Чтение текстовых файлов в python
- 17. Чтение текстовых файлов в applescript
- 18. Чтение нескольких текстовых файлов с разными именами в java
- 19. Чтение заголовков из нескольких файлов fits из того же каталога
- 20. Чтение нескольких файлов из каталога, R
- 21. Чтение конкретного столбца нескольких файлов в R
- 22. Чтение из нескольких текстовых файлов и электронной почты получателю
- 23. Одновременное использование нескольких экземпляров одного и того же пользователя
- 24. Применение одного и того же кода для нескольких файлов в нескольких папках
- 25. Чтение текстовых данных в R
- 26. Чтение нескольких текстовых файлов из каталога и добавление его столбцов в один текстовый файл в R
- 27. чтение текстовых файлов в Matlab
- 28. Чтение нескольких файлов из одного потока
- 29. Чтение больших текстовых файлов в MATLAB
- 30. HDF5 группировка/извлечение одного и того же слоя данных из всех файлов в группе в R
'data.table :: fread' удобен, если вы чувствуете себя слишком ленив, чтобы указать разделители, и ваши данные достаточно хорошо сформированы. Как правило, подход заключается в том, чтобы «скрыть» функцию чтения по вектору имен файлов и «do.call (rbind, ...)» (или dplyr или data.table) результат. – alistaire
@Ariel Глупый вопрос, но не возможно просто просто найти или заменить массу для ';' разделитель, чтобы все файлы были согласованными? Если это всего лишь одно, то это может быть самый простой подход. Если вам приходится иметь дело с ним на постоянной основе, подумайте о кодировании файлов, чтобы вы знали, какой разделитель использовать. –
@MatthewCrews - это возможность, но в случае десятичного значения en в данных есть «,» вместо «.». Это может быть проблемой. – Ariel