R read.table列向左移动

时间:2013-04-05 16:05:54

标签: r fill read.table

我创建了一个名为test2.txt的文件,其中包含以下信息:

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。这个问题没有得到解答。

2 个答案:

答案 0 :(得分:5)

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

  

如果sep = ""(read.table的默认值),则分隔符为“空格”,即一个或多个空格,制表符,换行符或回车符。

因此多个连续的标签被视为单个分隔符。

或使用read.delim代替read.table,因为其默认值更适合制表符分隔数据。

答案 1 :(得分: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