R中read.csv期间的数据丢失

时间:2014-10-02 15:02:32

标签: r csv import-from-csv

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

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 个答案:

答案 0 :(得分:2)

你的数据中有一些杂乱的字符 - 比如嵌入式控制字符。

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

This answer proposes a basic function执行这些步骤。

该功能如下所示:

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

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

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

是否已读入所有行?

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。