1

我一直在使用 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
4

2 回答 2

2

老实说read.table,不能排除不完整的情况。但是看看?read.table。在那里你会找到fill参数,它将添加NA到你不完整的行中。

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

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

r <- r[complete.cases(r)]
于 2013-07-07T09:51:24.673 回答
1

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

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

不过,在您导入的数据上使用read.delim(sep=" ")顺利,所以我猜Homo sapiens这应该是两个字段。

一种或另一种方式,请阅读您的文件的文档。这是确定它包含什么的唯一方法。

于 2013-07-07T10:12:59.553 回答