我的csv文件(可通过链接访问,也可通过屏幕截图查看)有8个观察结果。 Obs#5在“作者”列中具有非标准字符。我把这个阴影涂成黄色。
https://docs.google.com/spreadsheets/d/1-douIz03OQqahG6WCWY-irOE52oXtDDc4fJ6myMwJDk/edit?usp=sharing
当我运行以下命令时:
data1 <-read.csv(“ Book1.csv”,colClasses = c(“ end_date_n” =“字符”,“ start_date_n” =“字符”),stringsAsFactors = FALSE)
我收到此警告消息,并且仅导入了前4行和部分第5行。导入会在第5列中出现非标准字符的位置停止。
在scan(file = file,what = what,sep = sep,quote = quote,dec = dec, :EOF用引号引起来
当我从csv源文件中删除“作者”列时,导入工作正常。
如何在不删除问题列的情况下导入完整文件?
答案 0 :(得分:0)
一位同事想出了这个解决方案:
“原始字符是^ z,几十年来一直被DOS / Windows用作文件标记的结尾。由于UNIX系统从未使用过^ z,因此读入问题是Windows特定的。Windows系统通常会指导用户使用“ ALT”代码输入非ASCII字符(如é)。这可能是^ z的起源。”
“使用实用程序将^ z转换为无害的内容。下面的killZ函数将文件名转换为*,然后将结果写入与原始文件相同的目录中,但插入了-noz .txt或.csv(或其他)文件类型之前。然后,您可以按照读取原始.txt或.csv文件的相同方式来读取-noz文件。”
killZ <- function(fname) {
# open in binary mode
f <- file(fname, "rb")
res <- readLines(f)
# translate the ^Z to *
res <- gsub("\032", "*", res, fixed = TRUE)
# Create the new file name
ftype <- stringr::str_extract(fname, "\\..{1,3}$")
new_name <- paste0(gsub(ftype, "", fname), "-noz", ftype)
writeLines(res, con = new_name)
close(f)
return(new_name)
}