Как объединить .txt файлы из нескольких папок - PullRequest
0 голосов
/ 30 мая 2019

Я хочу объединить несколько .txt файлов в R из нескольких папок.Однако у меня возникают проблемы, когда я хочу разделить данные на разные столбцы.Прямо сейчас файлы объединяются, но в один столбец, когда их должно быть четыре.

Я использовал list.files, чтобы найти .txt файлов в папках в моем рабочем каталоге.Затем я использовал rbind и lapply, чтобы объединить их с read.delim.(см. ниже)

files = list.files(pattern = "*.txt")

myfiles = do.call(rbind, lapply(files, function(x) read.delim(x, header = FALSE, stringsAsFactors = FALSE)))

Приведенный выше код объединяет все файлы .txt, но первые 3 строки каждого файла являются артефактами загрузки данных (в основном это просто функция именования) и не имеют отношения к делу.к самим данным.Таким образом, после объединения файлов три строки повторяются.Я не могу использовать filter(), так как мне пришлось бы вручную просматривать данные (многие тысячи строк).Я также хотел бы повторить этот процесс в другой папке с аналогичной настройкой.Поэтому я хотел бы иметь возможность использовать тот же код.

Я думаю, что могу решить проблему, удалив три верхние строки каждого файла .txt перед их объединением.Затем я могу установить header = FALSE и просто добавить заголовки после объединения файлов.Но опять же, есть много сотен файлов, поэтому я не хочу делать это вручную.Я не уверен, как это сделать, хотя.Какие-либо предложения?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 30 мая 2019

Опции, расшифрованные из комментария:

  • Само собой, read.delim(..., skip = 3) удалит эти первые дублирующие строки.Это также удалит строку заголовка, поэтому у всех ваших фреймов будут общие имена столбцов, а это не большая проблема.
  • Чтобы это исправить, вы можете перечитать первую строку одного из файлов (сначала?), чтобы получить имена столбцов, с read.delim(..., nrows=1).Если мы использовали nrows=0, он читает все, поэтому нам нужно минимум 1, чтобы ограничить чтение строк;в комментарии я включил [0,], но поскольку все, что вам нужно, это имена столбцов, это на самом деле не влияет на вещи.

Вы можете сделать это в первый раз с чем-то вроде:

files = list.files(pattern = "*.txt")
myfiles = do.call(rbind, lapply(files, function(x) read.delim(x, skip = 3, header = FALSE, stringsAsFactors = FALSE)))
#                                                added this part ^^^^^^^^^
colnames(myfiles) <- colnames(read.delim(files[1], header=TRUE, nrows=1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...