R read.csv没有加载.tsv文件的所有行

时间:2015-02-14 15:18:44

标签: r read.csv

有点神秘。我有一个包含58936行的.tsv文件。我使用以下命令将文件加载到R中:

dat <- read.csv("weekly_devdata.tsv", header=FALSE, stringsAsFactors=TRUE, sep="\t")

但是nrow(dat)只显示:

> nrow(dat)
[1] 28485

所以我使用sed -n命令将它停止的行(在该行之前,包括之后和之后)写入一个新文件,并且能够将该文件加载到R中,所以我不认为那里文件中有任何损坏。

这是一个环境问题吗?

这是我的sessionInfo()

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] tcltk     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] sqldf_0.4-10   RSQLite_1.0.0  DBI_0.3.1      gsubfn_0.6-6   proto_0.3-10   scales_0.2.4   plotrix_3.5-11
[8] reshape2_1.4.1 dplyr_0.4.1   

loaded via a namespace (and not attached):
 [1] assertthat_0.1   chron_2.3-45     colorspace_1.2-4 lazyeval_0.1.10  magrittr_1.5     munsell_0.4.2   
 [7] parallel_3.1.2   plyr_1.8.1       Rcpp_0.11.4      rpart_4.1-8      stringr_0.6.2    tools_3.1.2 

我的内存耗尽了吗?这就是为什么它没有完成加载?

3 个答案:

答案 0 :(得分:2)

我最近遇到了类似的问题,结果我遇到了两个不同的问题。

1 - 并非所有行都有正确数量的标签。我最后用awk计算了它们

2 - 在文件的某些位置,我的引号没有关闭。这导致它跳过所有行,直到找到结束报价。

我将挖掘用于调查和解决这些问题的awk代码并将其发布。

由于我使用的是Windows,因此我使用了git bash附带的awk。

这计算了一行中标签的数量,并打印出那些没有正确数字的行。

  awk -F "\t" 'NF!=6 { print NF-1 ":" $0 } ' Catalog01.csv  

我使用类似于计数引号的东西,我用tr来修复它。

答案 1 :(得分:1)

很确定这不是内存问题。如果问题是无法匹配的引号,那么试试这个:

t <-read.csv("weekly_devdata.tsv", header=FALSE, stringsAsFactors=TRUE,sep="\t",
          quote="")

我在count.fields中使用了非常有用的函数table,以获得各种参数设置后果的高级视图。看看结果:

table( count.fields( "weekly_devdata.tsv", sep="\t"))

与之比较:

table( count.fields( "weekly_devdata.tsv",  sep="\t", quote=""))

有时需要使用readLines读取,然后删除一行或多行,将结果分配给clean,然后将清理后的行发送到read.table(text=clean, sep="\t", quote="")

答案 2 :(得分:0)

很可能是某些条目中的某些非法字符...查看上传的数量和发生问题的位置。深入研究原始数据的那一行。 Webdings字体就是那种东西!