Lors de la lecture de mon dataset dans R comme suit:
Dataset.df <- read.table("C:\\dataset.txt", header=T)
Je reçois le message d’erreur suivant:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.ssortingngs, : line 1 did not have 145 elements
Qu’est-ce que cela signifie et quelqu’un peut-il me dire comment résoudre ce problème?
Cette erreur est assez explicite. Il semble qu’il manque des données sur la première ligne de votre fichier de données (ou la deuxième ligne, selon le cas, puisque vous utilisez header = TRUE
).
Voici un mini exemple:
## Create a small dataset to play with cat("V1 V2\nFirst 1 2\nSecond 2\nThird 3 8\n", file="test.txt")
R détecte automatiquement qu’il doit s’attendre à des noms de domaine plus deux colonnes (3 éléments), mais il ne trouve pas 3 éléments sur la ligne 2, vous obtenez donc une erreur:
read.table("test.txt", header = TRUE) # Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.ssortingngs, : # line 2 did not have 3 elements
Regardez le fichier de données et voyez s’il y a un problème:
cat(readLines("test.txt"), sep = "\n") # V1 V2 # First 1 2 # Second 2 # Third 3 8
Une correction manuelle peut être nécessaire ou nous pouvons supposer que la valeur première valeur dans la ligne “Second” doit être dans la première colonne et que les autres valeurs doivent être NA
. Si tel est le cas, fill = TRUE
suffit pour résoudre votre problème.
read.table("test.txt", header = TRUE, fill = TRUE) # V1 V2 # First 1 2 # Second 2 NA # Third 3 8
R est également assez intelligent pour déterminer le nombre d’éléments dont il a besoin, même s’il manque des noms de domaine:
cat("V1 V2\n1\n2 5\n3 8\n", file="test2.txt") cat(readLines("test2.txt"), sep = "\n") # V1 V2 # 1 # 2 5 # 3 8 read.table("test2.txt", header = TRUE) # Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.ssortingngs, : # line 1 did not have 2 elements read.table("test2.txt", header = TRUE, fill = TRUE) # V1 V2 # 1 1 NA # 2 2 5 # 3 3 8
Lors de l’exécution de cette erreur et de l’examen de mon dataset qui semblait ne contenir aucune donnée manquante, j’ai découvert que quelques-unes de mes entrées contenaient le caractère spécial “#” qui entraînait un dérapage lors de l’importation des données. Une fois que j’ai retiré le “#” des cellules incriminées, les données imscopes sans problème.
J’ai rencontré ce problème lors de l’importation de certains fichiers à partir des données Add Health dans R (voir: http://www.icpsr.umich.edu/icpsrweb/ICPSR/studies/21600?archive=ICPSR&q=21600 ) Par exemple, le La commande suivante pour lire le fichier de données DS12 au format .tsv séparé par des tabulations générera l’erreur suivante:
ds12 <- read.table("21600-0012-Data.tsv", sep="\t", comment.char="", quote = "\"", header=TRUE) Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : line 2390 did not have 1851 elements
Il semble qu'il y ait un léger problème de formatage avec certains fichiers, ce qui entraîne le rejet du fichier par R. Au moins une partie du problème semble être l'utilisation occasionnelle de guillemets doubles au lieu d'une apostrophe qui provoque un nombre impair de guillemets doubles dans une ligne.
Après avoir bidouillé, j'ai identifié trois solutions possibles:
Ouvrez le fichier dans un éditeur de texte et recherchez / remplacez toutes les occurrences d'un caractère de citation "avec rien. En d'autres termes, supprimez tous les guillemets. Pour ces données délimitées par des tabulations, cela signifiait que certains extraits de commentaires plus longtemps entre guillemets, ce qui n’était pas un problème pour mon parsing des données.
Avec les données stockées sur ICPSR (voir lien ci-dessus) ou d'autres archives, une autre solution consiste à télécharger les données dans un nouveau format. Une bonne option dans ce cas est de télécharger la version Stata du DS12, puis de l'ouvrir en utilisant la commande read.dta comme suit:
library(foreign) ds12 <- read.dta("21600-0012-Data.dta")
Une solution / hack connexe consiste à ouvrir le fichier .tsv dans Excel et à le réenregistrer sous la forme d'un fichier texte séparé par des tabulations. Cela semble nettoyer tout problème de formatage qui rend R mécontent.
Aucun d'entre eux n'est idéal car ils ne résolvent pas tout à fait le problème en R avec le fichier .tsv original, mais la manipulation des données nécessite souvent l'utilisation de plusieurs programmes et formats.
Si vous utilisez Linux, le fichier de données provient de Windows. C’est probablement parce que le caractère ^ M Trouvez et supprimez. terminé!
Pour les autres qui ne trouvent pas de solution et qui savent que les données ne manquent pas d’éléments:
J’ai ce problème lorsque j’utilise Excel 2013 pour enregistrer des fichiers en tant que .csv, puis essayez de les charger dans R en utilisant read.table (). La solution de contournement que j’ai trouvée consiste à coller les données directement à partir d’Excel dans un document .txt, puis à ouvrir avec:
read.table(file.choose(), sep="\t").
J’espère que ça aide.
J’ai rencontré cette erreur lorsque j’avais un row.names = “id” (selon le tutoriel ) avec une colonne nommée “id”.
Outre tous les conseils mentionnés ci-dessus, vous pouvez également vérifier toutes les données.
S’il y a des espaces entre les mots, vous devez les remplacer par "_"
.
Cependant, comme je résous mon propre problème.
Une de mes variables était catégorique avec une alternative à plusieurs chaînes (“no event”). Lorsque j’utilisais read.table, il supposait que l’espace après la première chaîne signifiait la fin du sharepoint données et que la deuxième chaîne était placée dans la variable suivante. J’ai utilisé sep = “\ t” pour résoudre le problème. J’utilisais RStudio dans un environnement Mac OX. Une solution précédente consistait à transformer des fichiers .txt en fichiers .csv dans Excel, puis à les ouvrir avec la fonction read.csv.