我有一个.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
答案 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。