假设我们有一个文件名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行吗?有什么方法可以解决这个问题吗?
答案 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
。