0

我创建了一个名为 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 。那个问题没有回答。

4

2 回答 2

6

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

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

因此,多个连续的制表符被视为一个分隔符。

或者使用read.delim而不是read.table因为它的默认值更适合制表符分隔的数据。

于 2013-04-05T16:26:13.690 回答
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
于 2013-04-05T16:27:34.087 回答