2010-08-13 9 views
1

Je suis en train de lire des données qui est un fichier texte qui ressemble à ceci:Je ne peux pas lire les données à R

2009-08-09 - 2009-08-15 0 2 0 
2009-08-16 - 2009-08-22 0 1 0 
2009-08-23 - 2009-08-29 0 1 0 
2009-08-30 - 2009-09-05 0 1 0 
2009-09-06 - 2009-09-12 0 1 0 
2009-09-13 - 2009-09-19 0 1 0 
2009-09-20 - 2009-09-26 0 1 0 
2009-09-27 - 2009-10-03 0 1 0 

J'ai essayé d'utiliser cette commmand

test <- read.table('test', sep ="\t") 

ainsi que beaucoup de variations différentes sur ce thème. Mais tout ce que je reçois jamais est la suivante:

V1 
1 ÿþ2 
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16 

alors que je veux une trame de données à quatre colonnes.

Des idées où je me trompe?

+0

Etes-vous sûr que le fichier est délimité par des tabulations et qu'il n'y a pas d'espaces entre les variables? –

Répondre

4

Le fichier que vous lisez utilise probablement un codage autre que ASCII. ?read.table montre

read.table(file, header = FALSE, sep = "", quote = "\"'", 
      ... 
      fileEncoding = "", encoding = "unknown") 

fileEncoding: character string: if non-empty declares the encoding used 
      on a file (not a connection) so the character data can be 
      re-encoded. See 'file'. 

Donc, essayez peut-être régler le paramètre fileEncoding. Si vous ne connaissez pas l'encodage, essayez "utf-8" ou "cp-1252". Si cela ne fonctionne pas, si vous collez un extrait de votre fichier, nous pourrons peut-être identifier l'encodage.

+0

oui - j'avais pensé que cela pourrait être le problème et avait essayé utf-8 et cp-1252 whhic n'avait pas fonctionné. mais a enquêté plus et c'était "utf-16".maintenant ça marche. Merci! –

1

Votre séparateur pourrait être des espaces plutôt que des onglets. Si vous laissez l'argument sep comme "", il utilisera tout type d'espace blanc.

EDIT: En fait, l'encodage semble plus probable en tant que source du problème. Lire le fichier avec readLines, puis vérifier le codage avec Encoding.

3

Ce que vous voyez ici:

ÿþ 

est le Byte Order Mark (BOM) UTF-16-LE ou UCS-2LE. Voir Wikipedia (Byte Order Mark) pour une explication. Vous pourriez avoir des caractères de langues étranges dans votre fichier qui ont besoin de cet encodage, ou votre fichier pourrait avoir été créé par un logiciel Windows qui enregistre des fichiers avec une nomenclature. La nomenclature est placée avant toutes les autres données au début d'un fichier.

R voit ces caractères et croit que les données commencent ici. Essayez:

(1) Si vous n'avez pas besoin de ce codage, ouvrez simplement vos données dans un éditeur de texte (comme Vim), changez le codage, sauvegardez et lisez dans R. (In Vim do :write ++enc=utf-8 new_file_name.txt, puis fermez (:wq)

(2) Si vous avez besoin de l'encodage ou ne voulez pas passer par un éditeur de texte, dites à R quel encodage le fichier est en vous pourriez expérimenter.

read.table("file.dat", fileEncoding = "UTF-16") 
read.table("file.dat", fileEncoding = "UTF-16LE") 
read.table("file.dat", fileEncoding = "UTF-16-LE") 
read.table("file.dat", fileEncoding = "UCS-2LE") 

Si aucun de ces travaux, essayez la solution donnée dans cette question connexe: How to detect the right encoding for read.csv?, et vérifiez le manuel R sur R Data Import/Export, il a une section qui explique à propos des fichiers avec nomenclature.

Questions connexes