过滤掉包含缺失数据的行,read.table失败 - R

时间:2013-07-07 09:21:56

标签: r filter read.table

我一直在使用R从NCBI中检索关于遗传多态性列表的数据(下面最左边列中的rs号),正如您所看到的,返回的表包含缺少数据的行(实际上是制表符)没有间隔)。每列中包含数据的行(例如rs1968866)是找到基因符号的行,我想保留这些行并过滤掉那些缺少数据的行。

我熟悉的用于读表的命令是read.table(file, header = TRUE),这在这个实例中不起作用,因为R读取的行与标题不匹配(如rs11710684)。

有没有人有一个技巧只能读取与格式的列标题匹配的行(每列中的数据)?这样很方便,因为它可以同时丢弃我不需要的数据。

以下是我从NCBI检索的表格示例:

marker genesymbol locusID chr chrpos fxn_class species dupl_loc current.rsid flag
rs11710684   3 166516497  Homo sapiens  rs11710684 1
rs1968866 PTRF 284119 17 40566240 intron-variant Homo sapiens  rs1968866 1
rs2309920   2 101329860  Homo sapiens  rs2309920 1
rs2384319 KIF3C 3797 2 26206255 upstream-variant-2KB Homo sapiens  rs2384319 1
rs3128894   6 29839360  Homo sapiens  rs3128894 1
rs2277329 SPRYD3 84926 12 53468419 intron-variant Homo sapiens  rs2277329 1
rs7785249 DGKB 1607 7 14327966 intron-variant Homo sapiens  rs7785249 1

2 个答案:

答案 0 :(得分:2)

我诚实地认为read.table无法排除不完整的案例。但请看?read.table。在那里,您会找到fill参数,该参数会将NA添加到您不完整的行中。

r <- read.table(file, header=TRUE, fill=TRUE)

之后你可以简单地删除不完整的行:

r <- r[complete.cases(r)]

答案 1 :(得分:1)

如果您的数据以制表符分隔,则可以使用read.delim。这应该会自动为您处理缺失值。

如果您的数据以空格分隔,则可以使用read.delim(*, sep=" ")read.table(*, header=TRUE, sep=" ")。任何一个都将使用空格作为分隔符读取您的数据,多个连续的空格表示缺失值。看看你提供的摘录,你必须决定Homo sapiens是一个还是两个字段 - 后者是好的,但如果你的数据确实是由空格分隔的话,那么前者会有问题。 / p>

使用read.delim(sep=" ")对您导入的数据毫不费力,因此我猜测Homo sapiens应该是两个字段。

不管怎样,请阅读文件的文档。这是确定它包含的唯一方法。