我正在尝试读取一些数据,这是一个看起来像这样的文本文件:
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”。如果这不起作用,那么如果您粘贴实际文件的片段,我们就可以识别编码。
答案 1 :(得分:3)
你在这里看到的是什么:
ÿþ
是UTF-16-LE或UCS-2LE的字节顺序标记(BOM)。请参阅维基百科(Byte Order Mark)以获得解释。您的文件中可能包含需要此编码的奇怪语言的字符,或者您的文件可能是由某些Windows软件创建的,该软件使用BOM保存文件。 BOM放在文件开头的所有其他数据之前。
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")
如果这些都不起作用,请尝试相关问题中给出的解决方案:How to detect the right encoding for read.csv?,并查看R Data Import/Export上的R手册,它有一节介绍带有BOM的文件。
答案 2 :(得分:1)
您的分隔符可以是空格而不是制表符。如果您将sep
参数保留为""
,它将使用任何类型的空格。
编辑:实际上,编码确实更有可能成为问题的根源。
使用readLines
读取文件,然后使用Encoding
检查编码。