有点神秘。我有一个包含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
我的内存耗尽了吗?这就是为什么它没有完成加载?
答案 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字体就是那种东西!