2014-10-02 109 views
0

我有一個.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

回答

2

您的數據有些凌亂的人物 - 比如嵌入控制字符。

一種解決方法是讀取二進制模式的文件,並在閱讀文本文件中使用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