Как вы читаете в нескольких файлах .txt в R?
Я использую R для визуализации некоторых данных, все из которых находятся в формате .txt. В каталоге есть несколько сотен файлов, и я хочу загрузить их в одну таблицу за один снимок.
Любая помощь?
РЕДАКТИРОВАТЬ:
- Сплит-кадр данных по уровням фактора и именных кадров данных по этим уровням
- Как выбрать строку с максимальным значением в каждой группе
- Не удалось установить пакеты в последней версии RStudio и R версии.3.1.1
- Настройка прокси для R
- Как удалить все объекты, кроме одного из рабочей области в R?
Список файлов не является проблемой. Но у меня возникают проблемы с переходом из списка в контент. Я пробовал часть кода здесь , но я получаю ошибку с этой частью:
all.the.data <- lapply( all.the.files, txt , header=TRUE)
поговорка
Error in match.fun(FUN) : object 'txt' not found
Любые fragmentы кода, которые могли бы прояснить эту проблему, получили бы большую оценку.
- Возьмите сумму переменной, если комбинация значений в двух других столбцах уникальна
- Формат чисел до значительных цифр в R
- Получение OVER QUERY LIMIT после одного запроса с геокодом
- Как проверить, вызывает ли вызов функции предупреждение?
- Добавление текста в таблицу grid.table
- R создать идентификатор внутри группы
- Найдите, сколько раз повторяющиеся строки повторяются в кадре данных R
- как вернуть число десятичных знаков в R
Вы можете попробовать следующее:
filelist = list.files(pattern = ".*.txt") #assuming tab separated values with a header datalist = lapply(filelist, function(x)read.table(x, header=T)) #assuming the same header/columns for all files datafr = do.call("rbind", datalist)
Посмотрите на помощь для функций dir()
aka list.files()
. Это позволяет получить список файлов, которые можно фильтровать с помощью регулярных выражений, по которым вы могли бы зацикливаться.
Если вы хотите, чтобы все сразу, вам сначала нужно иметь контент в одном файле. Один из вариантов заключается в использовании cat
для ввода всех файлов в stdout
и чтения с использованием popen()
. Дополнительную информацию см. В help(Connections)
.
Спасибо за ответы на все вопросы!
Между тем, я также взломал метод самостоятельно. Дайте мне знать, если это полезно:
library(foreign) setwd("/path/to/directory") files <-list.files() data <- 0 for (f in files) { tempData = scan( f, what="character") data <- c(data,tempData) }
Существует два быстрых способа чтения нескольких файлов и их размещение в единый фрейм данных или data.table
Использование fread
из пакета data.table
# List all txt files including sub-folders list_of_files <- list.files(path = ".", recursive = TRUE, pattern = "\\.txt$", full.names = TRUE) library(data.table) # Read all the files and create a FileName column to store filenames DT <- rbindlist( sapply(list_of_files, fread, simplify = FALSE), use.names = TRUE, idcol = "FileName" )
Использование purrr::map_df
и readr::read_table2
из tidyverse
package:
library(tidyverse) # Read all the files and create a FileName column to store filenames df <- list_of_files %>% set_names(.) %>% map_df(read_table2, .id = "FileName")
Примечание. Чтобы очистить имена файлов, используйте функции basename
или gsub
Существует действительно простой способ сделать это сейчас: пакет readtext .
readtext::readtext("path_to/your_files/*.txt")
Это действительно так просто.