在read.table中的5行之后出现不同数量的列时,fill = TRUE会失败吗?

时间:2015-08-18 07:21:47

标签: r read.table

假设我们有一个文件名test.txt,其中包含未知数量的列:

1   2   3   4   5
1   2   3   4   5
1   2   3   4   5
1   2   3   4   5
1   2   3   4   5
1   2   3   4   5
1   2   3   4   5
1   2   3   4   5   6   7   8
1   2   3   4   5
1   2   3   4   5   6
1   2   3   4   5   6
1   2   3   4   5   6
当第8行超过5列时,

fill=T失败:

read.table('test.txt', header=F, sep='\t', fill=T)

结果:

   V1 V2 V3 V4 V5
1   1  2  3  4  5
2   1  2  3  4  5
3   1  2  3  4  5
4   1  2  3  4  5
5   1  2  3  4  5
6   1  2  3  4  5
7   1  2  3  4  5
8   1  2  3  4  5
9   6  7  8 NA NA
10  1  2  3  4  5
11  1  2  3  4  5
12  6 NA NA NA NA
13  1  2  3  4  5
14  6 NA NA NA NA
15  1  2  3  4  5
16  6 NA NA NA NA

但是skip=3,一切正常

read.table('test.txt', header=F, sep='\t', fill=T, skip=3)

我们得到了我们的期望:

  V1 V2 V3 V4 V5 V6 V7 V8
1  1  2  3  4  5 NA NA NA
2  1  2  3  4  5 NA NA NA
3  1  2  3  4  5 NA NA NA
4  1  2  3  4  5 NA NA NA
5  1  2  3  4  5  6  7  8
6  1  2  3  4  5 NA NA NA
7  1  2  3  4  5  6 NA NA
8  1  2  3  4  5  6 NA NA
9  1  2  3  4  5  6 NA NA

为什么会这样?是因为fill=T只检查前5行吗?有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

col.names = paste0("V",seq_len(N))中使用read.table,其中N是最大列数。

答案 1 :(得分:1)

我在read.table的例子中找到了答案。

ncol <- max(count.fields('test.txt', sep = "\t"))
read.table('test.txt', header=F, sep='\t', fill=T, col.names=paste0('V', seq_len(ncol)))

这是因为fill=T只检查前五行。解决方案是指定col.names