2010-08-09 5 views
0

D'accord, je suis en train d'utiliser la méthode this pour obtenir mes données dans R, mais je continue à obtenir l'erreur:Lire dans plusieurs fichiers txt avec en-tête en R

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

Ceci est le script Je suis en cours d'exécution:

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) 

Gardez à l'esprit, mes priorités sont les suivantes:

  1. Pour lire un fichier txt
  2. Pour associer les en-têtes au contenu
  3. Pour lire plusieurs fichiers.

Merci !!!

Répondre

1

Il semble que l'un des fichiers que vous essayez de lire ait le même nombre de colonnes que l'en-tête. Pour lire ce fichier, vous devrez peut-être modifier l'en-tête de ce fichier ou utiliser un séparateur de colonnes plus approprié. Pour voir quel fichier est à l'origine du problème, essayez quelque chose comme:

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

Une autre option est d'obtenir le contenu du fichier et l'en-tête séparément:

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

Si vous ne pouvez pas obtenir read.table à travail, vous pouvez toujours revenir sur readLines et extraire le contenu du fichier manuellement (en utilisant, par exemple, strsplit).

1

Pour garder à l'esprit d'éviter les boucles d'une vérification initiale de santé mentale avant de charger toutes les données qui pourrait être fait avec

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

(en supposant que votre tête est séparée par « ; » qui ne peut être le cas)

Questions connexes