首页 文章

非标准字符阻止我在R中读取完整的csv文件

提问于
浏览
0

我的csv文件(可通过链接访问并通过屏幕截图查看)有8个观察结果 . Obs#5在“author”列中有一个非标准字符 . 我把这个黄色遮住了 .

https://docs.google.com/spreadsheets/d/1-douIz03OQqahG6WCWY-irOE52oXtDDc4fJ6myMwJDk/edit?usp=sharing

enter image description here

当我运行以下内容时:

data1 <-read.csv(“Book1.csv”,colClasses = c(“end_date_n”=“character”,“start_date_n”=“character”),stringsAsFactors = FALSE)

我收到此警告消息,只导入前4行和部分第5行 . 导入将停止在col 5中出现非标准字符的位置 .

在扫描中(file = file,what = what,sep = sep,quote = quote,dec = dec,:引用字符串中的EOF)

当我从我的csv源文件中删除“author”列时,导入工作正常 .

如何在不删除问题列的情况下导入完整文件?

1 回答

  • 0

    一位同事的熟人提出了这个解决方案:

    “原始字符是^ z,几十年来DOS / Windows使用它作为文件标记的结尾 . 因为UNIX系统从未使用过^ z,所以读入问题是特定于Windows的.Windows系统经常引导用户输入非-ASCII字符(如é)使用“ALT”代码 . 这可能是^ z的起源 . “

    “使用实用程序将^ z转换为无害的 . 下面的killZ函数获取文件的名称,将^ z转换为*,然后将结果写入与原始文件相同的目录中,但在之前插入-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)
    }
    

相关问题