R中的read.csv数据丢失

问题描述:

我有一个.csv文件被导入到R,它有超过1K的观察值。但是,当我像往常一样使用read.csv函数时,导入的文件只有21个观察值。这很奇怪。我从来没有见过这个。R中的read.csv数据丢失

t <- read.csv("E:\\AH1_09182014.CSV",header=T, colClasses=c(rep("character",3),rep("numeric",22)),na.string=c("null","NaN",""),stringsAsFactors=FALSE) 

任何人都可以帮我找出问题吗?我给一个链接到我的数据文件:

https://drive.google.com/file/d/0B86_a8ltyoL3TzBza0x1VTd2OTQ/edit?usp=sharing

+1

看第22行 - 有什么奇怪的吗? – A5C1D2H2I1M1N2O1R2T1 2014-10-02 15:07:19

+0

@AnandaMahto似乎在第22行有一个混乱的价值...不能R只是强迫这个NA值? – Vicki1227 2014-10-02 15:09:35

+0

看起来文件中还有很多其他行也会导致问题。你可以在'data.table'包中使用'fread'来读取整个文件。由于第4列至第25列中的非数字值会将所有列强制转换为“字符”,但您至少需要整个文件,并且您可以从中手动清理它。 – nrussell 2014-10-02 15:17:28

您的数据有些凌乱的人物 - 比如嵌入控制字符。

一种解决方法是读取二进制模式的文件,并在阅读文本文件中使用read.csv

This answer proposes a basic function做的那些步骤。

功能如下:

temp <- read.csv(text = sReadLines("~/Downloads/AH1_09182014.CSV"), 
       stringsAsFactors = FALSE) 

是否所有行已经在读:

sReadLines <- function(fnam) { 
    f <- file(fnam, "rb") 
    res <- readLines(f) 
    close(f) 
    res 
} 

您可以按如下方式使用它?

dim(temp) 
# [1] 1449 25 

问题线在哪里?

unlist(temp[21, ], use.names = FALSE) 
# [1] "A-H Log 1" "09/18/2014" "0:19:00" "7.866"  "255"  "0.009" 
# [7] "525"  "7"   "4468"  "76"   "4576.76" "20"  
# [13] "71"   "19"   "77"   "1222"  "33857"  "-3382" 
# [19] "26\032)" "18.30"  "84.80"  "991.43"  "23713.90" "0.85" 
# [25] "10.54" 

^^见上面的项目[19]

因此,您将无法预先指定所有列类型 - 除非先清除CSV。

+0

谢谢阿难。为什么我的dim(temp)返回1449以外的512 * 24矩阵?我只是复制你的代码... – Vicki1227 2014-10-02 15:59:09

+0

@ Vicki1227,恐怕我不能帮得太多。我只是简单地下载了你的CSV文件,并将它应用到了它上面,并得到了上面描述的对象。清除你的工作空间并重新开始? – A5C1D2H2I1M1N2O1R2T1 2014-10-02 16:01:23