Я не могу прочитать данные в R - PullRequest
1 голос
/ 13 августа 2010

Я пытаюсь прочитать некоторые данные, которые представляют собой текстовый файл, который выглядит следующим образом:

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 

Я пытался использовать эту команду

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

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

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

тогда как я хочу четырехколонный фрейм данных.

Есть идеи, где я иду не так?

Ответы [ 3 ]

4 голосов
/ 13 августа 2010

Файл, который вы читаете, вероятно, использует некоторую кодировку, отличную от ASCII. ?read.table показывает

 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'. 

Так что, возможно, попробуйте установить параметр fileEncoding. Если вы не знаете кодировку, попробуйте «utf-8» или «cp-1252». Если это не сработает, то, если вы вставите фрагмент своего файла, мы сможем определить кодировку.

3 голосов
/ 25 июня 2013

Что вы видите здесь:

ÿþ

является меткой порядка байтов (BOM) для UTF-16-LE или UCS-2LE. См. Wikipedia ( Порядок следования байтов ) для объяснения. В вашем файле могут быть символы из странных языков, для которых требуется эта кодировка, или ваш файл мог быть создан каким-то программным обеспечением Windows, которое сохраняет файлы со спецификацией. Спецификация помещается перед всеми другими данными в начале файла.

R видит эти символы и считает, что данные начинаются здесь. Попробуйте:

(1) Если вам не нужна эта кодировка, просто откройте ваши данные в текстовом редакторе (например, Vim), измените кодировку, сохраните и считайте в R. (В Vim сделайте :write ++enc=utf-8 new_file_name.txt, затем закройте файл и откройте вновь сохраненную версию, затем выполните :set nobomb, просто чтобы убедиться, затем :wq.)

(2) Если вам нужна кодировка или вы не хотите проходить через текстовый редактор, сообщите R, в какой кодировке находится файл. Вы можете поэкспериментировать с:

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")

Если ничего из этого не работает, попробуйте решение, приведенное в этом связанном вопросе: Как определить правильную кодировку для read.csv? и проверить руководство по R на Импорт / экспорт данных R , в нем есть раздел, который объясняет файлы с спецификацией.

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

Ваш разделитель может быть пробелами, а не символами табуляции. Если вы оставите аргумент sep как "", он будет использовать любые пробелы.

РЕДАКТИРОВАТЬ: На самом деле, кодировка звучит скорее как источник проблемы.

Считайте файл с помощью readLines, затем проверьте кодировку с помощью Encoding.

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