【问题标题】:Filter out rows that contain missing data, read.table failing - R过滤掉包含缺失数据的行,read.table 失败 - R
【发布时间】:2013-07-07 09:21:56
【问题描述】:

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

【问题讨论】:

  • 您可能需要指定分隔符(sep 参数)。阅读您的数据的文档以了解它是什么。我猜它是制表符分隔的,并且您有多个标签(已被 SO 编辑框删除)。

标签: r filter read.table


【解决方案1】:

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

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

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

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

【讨论】:

  • @agstudy:谢谢我不知道complete.cases。我编辑我的答案。
  • 另一个很棒的建议 - 很好地回答了我的问题的第二部分。
【解决方案2】:

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

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

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

无论哪种方式,请务必阅读文件的文档。这是确定它包含什么的唯一方法。

【讨论】:

  • 惊人的答案。谢谢你的建议 - 我会试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2022-09-27
  • 2021-09-08
  • 1970-01-01
  • 2021-09-15
  • 2021-03-15
相关资源
最近更新 更多