2010-08-13 5 views
1

Я пытаюсь прочитать в некоторых данных, что представляет собой текстовый файл, который выглядит следующим образом:я не могу читать в данных 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 

Я попытался с помощью этого ввода команды

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

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

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

, в то время как мне нужен четырехкабельный фрейм данных.

Любые идеи, в которых я ошибаюсь?

+0

Вы уверены, что файл с разделителем табуляции, и между переменными нет пробелов? –

ответ

4

Файл, который вы читаете, вероятно, использует некоторую кодировку, отличную от 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». Если это не сработает, то, если вы будете использовать фрагмент вашего фактического файла, мы сможем идентифицировать кодировку.

+0

Да - я думал, что это может быть проблемой, и попробовал utf-8 и cp-1252, которые не работали. но исследовал больше, и это было «utf-16».теперь это работает. Спасибо! –

1

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

EDIT: На самом деле кодирование звучит скорее как источник проблемы.

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

3

То, что вы видите здесь:

ÿþ 

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

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

(1) Если вам не нужна эта кодировка, просто откройте свои данные в текстовом редакторе (например, Vim), измените кодировку, сохраните и прочитайте в R. (In Vim do :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") 

Если ни одна из этих работ, попробуйте решение, приведенное в этом связанном с этим вопрос: How to detect the right encoding for read.csv?, и проверьте руководство R на странице R Data Import/Export, в нем есть раздел, в котором описываются файлы с спецификацией.

Смежные вопросы