我一直在使用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
答案 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
应该是两个字段。
不管怎样,请阅读文件的文档。这是确定它包含的唯一方法。