0

有点神秘。我有一个包含 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 

我是不是内存不够了?这就是它没有完成加载的原因吗?

4

3 回答 3

2

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

1 - 并非所有行都有正确数量的选项卡。我最终用 awk 数了数

2 - 在文件中的某些点,我有未关闭的引号。这导致它跳过所有行,直到找到结束引号。

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

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

这计算了一行中的制表符数量并打印出那些没有正确编号的行。

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

我使用了类似于计数引号的东西,并且我使用 tr 修复了很多。

于 2015-02-14T15:54:36.380 回答
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="")

于 2015-02-14T18:09:17.150 回答
0

很可能是某些条目中的一些非法字符...查看上传了多少以及问题发生在哪里。深入研究那一行原始数据。Webdings字体之类的东西!

于 2015-02-14T22:05:47.630 回答