Прочитать в нескольких .txt файлах с заголовком в R - PullRequest
0 голосов
/ 09 августа 2010

Хорошо, я пытаюсь использовать этот метод для передачи моих данных в R, но я продолжаю получать сообщение об ошибке:

  Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 1 did not have 22 elements

Это скрипт, который я запускаю:

library(foreign)

setwd("/Library/A_Intel/")

filelist <-list.files()

#assuming tab separated values with a header    
 datalist = lapply(filelist, function(xx)read.table(xx, header=T, sep=";")) 

#assuming the same header/columns for all files
 datafr = do.call("rbind", datalist) 

Имейте в виду, мои приоритеты:

  1. Для чтения из файла .txt
  2. Чтобы связать заголовки с содержимым
  3. Для чтения из нескольких файлов.

Спасибо !!!

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Для того, чтобы избежать циклов for, начальная проверка работоспособности перед загрузкой всех данных может быть выполнена с помощью

lapply(filelist, function(xx){
       print (scan(xx, what = 'character', sep=";", nlines = 1))} )

(при условии, что ваш заголовок отделен ';', что может быть не так)

1 голос
/ 09 августа 2010

Похоже, что один из файлов, которые вы пытаетесь прочитать, имеет такое же количество столбцов, что и заголовок. Чтобы прочитать этот файл, вам, возможно, придется изменить заголовок этого файла или использовать более подходящий разделитель столбцов. Чтобы увидеть, какой файл вызывает проблему, попробуйте что-то вроде:

datalist <- list()
for(filename in filelist){
  cat(filename,'\n')
  datalist[[filename]] <- read.table(filename, header = TRUE, sep = ';')
}

Другой вариант - отдельно получить содержимое файла и заголовка:

datalist[[filename]] <- read.table(filename, header = FALSE, sep = ';')
thisHeader <- readLines(filename, n=1)
## ... separate columns of thisHeader ...
colnames(datalist[[filename]]) <- processedHeader

Если вы не можете заставить read.table работать, вы всегда можете вернуться к readLines и извлечь содержимое файла вручную (например, strsplit).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...