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
您的数据有些凌乱的人物 - 比如嵌入控制字符。
一种解决方法是读取二进制模式的文件,并在阅读文本文件中使用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。
谢谢阿难。为什么我的dim(temp)返回1449以外的512 * 24矩阵?我只是复制你的代码... – Vicki1227 2014-10-02 15:59:09
@ Vicki1227,恐怕我不能帮得太多。我只是简单地下载了你的CSV文件,并将它应用到了它上面,并得到了上面描述的对象。清除你的工作空间并重新开始? – A5C1D2H2I1M1N2O1R2T1 2014-10-02 16:01:23
看第22行 - 有什么奇怪的吗? – A5C1D2H2I1M1N2O1R2T1 2014-10-02 15:07:19
@AnandaMahto似乎在第22行有一个混乱的价值...不能R只是强迫这个NA值? – Vicki1227 2014-10-02 15:09:35
看起来文件中还有很多其他行也会导致问题。你可以在'data.table'包中使用'fread'来读取整个文件。由于第4列至第25列中的非数字值会将所有列强制转换为“字符”,但您至少需要整个文件,并且您可以从中手动清理它。 – nrussell 2014-10-02 15:17:28