使用read.table()读取压缩格式的squid日志时,出现以下错误:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : line 134147 did not have 10 elements
解压缩文件,我看到第134147行已损坏。但是,还有其他行也同样已损坏,所以我不可能手动运行read.tables,查看有问题的行号,删除它,然后重复整个过程。
有没有办法告诉R忽略这些行并继续阅读表的其余部分?我试过try()但没有任何成功。
我已经阅读了一些关于忽略read.table()错误的相关帖子,但所有这些都谈到纠正违规行,这对我来说不是一个选项,因为文件是压缩的,我必须手动解压它们;而且可能还有几条这样的腐败线。
我的阅读代码(使用try块):
try({dfApr4gw1 <- read.table(
"log1.gz", header=FALSE,
col.names = c("time", "duration", "local ip", "squid result code", "bytes", "request method", "url", "user", "squid hierarchy code", "type"),
na.strings="-",
colClasses = c("numeric", "integer", "factor", "factor", "integer", "factor", "character", "character", "character", "factor")
)})
答案 0 :(得分:1)
可能适合您的用例的一个选项是在每行中读取一列,然后再用分隔符分隔该行,在您的情况下,该分隔符显示为逗号。您可以丢弃任何没有您期望的10列的行。
dfApr4gw1 <- read.table(
"log1.gz", header=FALSE, col.names = c("column"), na.strings="-",
colClasses = c("character"))
rows.keep <- apply(dfApr4gw1, 1, function(x) {
if (length(strsplit(pangram, " ")[[1]]) == 10) {
return TRUE
} else {
return FALSE
}
})
dfApr4gw1 <- dfApr4gw1[rows.keep, ]
现在dfApr4gw1
只包含格式正确的行,您可以轻松地将其转换为具有10列相应类型的数据框。