【问题标题】:read.table creates too few rows, but readLines has the right numberread.table 创建的行太少,但 readLines 的行数正确
【发布时间】:2011-05-02 06:47:21
【问题描述】:

我正在尝试将制表符分隔列表导入 R。

它有 81704 行长。但是,read.table 仅创建 31376。这是我的代码:

population <- read.table('population.txt', header=TRUE,sep='\t',na.strings = 'NA',blank.lines.skip = FALSE)

没有#注释掉任何东西。

这里是前几行:

[1] "NAME\tSTATENAME\tPOP_2009"      "Alabama\tAlabama\t4708708"      "Abbeville city\tAlabama\t2934"  "Adamsville city\tAlabama\t4782"
[5] "Addison town\tAlabama\t711"

当我阅读它时,readLines 给出了正确的数字。

非常感谢任何想法!

【问题讨论】:

  • 几个想法:文件中是否有引号 " 或 '?如果是这样,它可能会将换行符解析到其中一个字段中。另一种可能性:是否有任何混合 CR (\r ) 和 LF (\n) 字符?

标签: r


【解决方案1】:

如果不查看输入文件就很难诊断,但通常怀疑是引号和注释字符(即使您认为没有后者)。你可以试试:

quote = "", comment.char = ""

作为 read.table() 的参数,看看是否有帮助。

【讨论】:

  • 我遇到了类似的问题,readline() 返回几乎是 read.table() 的两倍。你的建议就像一个魅力。谢谢.. 虽然我仍然有大约 200 行没有被 R 报告.. 现在我正在使用 read.table(... header=TRUE, sep="|", na.strings = "NA", fill=TRUE, strip.white=TRUE, blank.lines.skip = TRUE, stringsAsFactors=FALSE, quote = "", comment.char = "")
  • 有没有人考虑过将此行为设为默认行为?
【解决方案2】:

查看count.fields 文件中的内容:

n <- count.fields('population.txt', sep='\t', blank.lines.skip=FALSE)

然后你可以检查

length(n) # should be 81705 (it count header so rows+1), if yes then:
table(n) # show you what's wrong

然后您 readLines 您的文件并检查字段数错误的行。 (例如x&lt;-readLines('population.txt'); head(x[n!=6])

【讨论】:

  • 好答案,我忘了 count.fields()。它采用与 read.table() 相同的所有参数,因此可以很好地检查。
  • @neilfws 是的。但我认为你对quote=""的建议正是他所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2020-05-03
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
相关资源
最近更新 更多