2013-04-05 84 views
0

我创建了一个名为的test2.txt以下信息文件:[R列函数read.table左移

col1 col2 col3 col4 
1 A B 
2 A B 
3 A B 
4 A B 
5 A B 
6 A B 
7 A   C 
8 A   C 

当使用以下命令读取:

test.ws=read.table(paste(inputDir,'test2.txt',sep=''),fill=T,header=T) 

我得到以下:

col1 col2 col3 col4 
1 1 A B NA 
2 2 A B NA 
3 3 A B NA 
4 4 A B NA 
5 5 A B NA 
6 6 A B NA 
7 7 A C NA 
8 8 A C NA 

列向左移动。是什么赋予了?!

我试过如下:

> count.fields(paste(inputDir,'test.txt',sep='')) 
[1] 4 3 3 3 3 3 3 4 4 

而且它告诉我,选项卡的数量是不同的,但它不是!我该怎么处理这些信息?值得一提的是,将这个.txt文件导入到Excel中时,它会正确读取这些标签,并且不会跳过或移动任何列。

我试图单独做这个指定的列名,但没有奏效:

colNames=names(test.ws) 
test.ws=read.table(paste(inputDir,'test2.txt',sep=''),skip=1,fill=T,header=T,col.names=colNames) 

产量:

Warning message: 
In read.table(paste(inputDir, "test2.txt", sep = ""), skip = 1, : 
    header and 'col.names' are of different lengths 

我发现了一个类似的问题在网上:https://stat.ethz.ch/pipermail/r-help/2008-July/166676.html。这个问题没有回答。

+0

我认为这是转移。看看我给R的.txt文件。它显然在第7行和第8行有四列。但是当我读取时,将它定位到R,第四列简单地是NA,第七行和第八行的第四列向左移动。 – 2013-04-05 16:13:54

+1

如果列分隔符只是空格,R怎么可能知道最后几行的空格应该包含一个空列? – joran 2013-04-05 16:20:49

回答

5

如果这是制表符分隔数据,请相应地设置分隔符:sep="\t"。否则(从帮助上read.table

如果sep = ""(默认函数read.table为),隔板为“白色空间”,这是一个或多个空格,制表符,换行符或回车。

等多个连续制表符被视为单个分隔符。

或者使用read.delim代替read.table为具有缺省值更适合于制表符分隔的数据。

+0

宾果!我可以发誓我是这么做的,但我显然正在考虑粘贴()中的sep。这很尴尬...... – 2013-04-05 16:48:44

2

也许你有固定宽度的列?

read.fwf(textConnection("col1 col2 col3 col4 
1 A B 
2 A B 
3 A B 
4 A B 
5 A B 
6 A B 
7 A   C 
8 A   C"),widths = rep(5,4)) 

    V1 V2 V3 V4 
1 col1 col2 col3 col4 
2 1  A  B <NA> 
3 2  A  B <NA> 
4 3  A  B <NA> 
5 4  A  B <NA> 
6 5  A  B <NA> 
7 6  A  B <NA> 
8 7  A    C 
9 8  A    C