R read.csv 没有加载 .tsv 文件的所有行
R read.csv didn't load all rows of .tsv file
有点神秘。我有一个包含 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
我是不是 运行 内存不足?这就是它没有完成加载的原因吗?
我最近遇到了类似的问题,结果我遇到了两个不同的问题。
1 - 并非所有行都有正确数量的制表符。我最终使用 awk
对它们进行了计数
2 - 在文件中的某些位置,我有未关闭的引号。这导致它跳过所有行,直到找到结束引号。
我将挖掘我用来调查和修复这些问题的 awk 代码,然后 post 它。
因为我用的是Windows,所以我用的是gitbash自带的awk。
这计算了一行中的制表符数量并打印出那些编号不正确的行。
awk -F "\t" 'NF!=6 { print NF-1 ":" [=10=] } ' Catalog01.csv
我用了类似于计数引号的东西,我用 tr 修复了很多。
很确定这不是内存问题。如果问题是不匹配的引号,那么试试这个:
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="")
很可能是某些条目中的一些非法字符...检查上传的数量以及问题发生的位置。深入研究原始数据的那一行。 Webdings 字体那种东东!
有点神秘。我有一个包含 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
我是不是 运行 内存不足?这就是它没有完成加载的原因吗?
我最近遇到了类似的问题,结果我遇到了两个不同的问题。
1 - 并非所有行都有正确数量的制表符。我最终使用 awk
对它们进行了计数2 - 在文件中的某些位置,我有未关闭的引号。这导致它跳过所有行,直到找到结束引号。
我将挖掘我用来调查和修复这些问题的 awk 代码,然后 post 它。
因为我用的是Windows,所以我用的是gitbash自带的awk。
这计算了一行中的制表符数量并打印出那些编号不正确的行。
awk -F "\t" 'NF!=6 { print NF-1 ":" [=10=] } ' Catalog01.csv
我用了类似于计数引号的东西,我用 tr 修复了很多。
很确定这不是内存问题。如果问题是不匹配的引号,那么试试这个:
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="")
很可能是某些条目中的一些非法字符...检查上传的数量以及问题发生的位置。深入研究原始数据的那一行。 Webdings 字体那种东东!