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

2024-01-03

假设我们有一个文件名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

fill=T当第 8 行超过 5 列时失败:

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

results:

   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 行?有什么办法可以解决这个问题吗?


我在 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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当read.table中5行之后出现不同数量的列时,fill=TRUE会失败吗? [复制] 的相关文章

随机推荐