【问题标题】:Non-standard character prevents me from reading in full csv file in R非标准字符阻止我在 R 中读取完整的 csv 文件
【发布时间】:2019-01-03 18:01:16
【问题描述】:

我的 csv 文件(可通过链接访问并通过屏幕截图查看)有 8 个观察值。 Obs #5 在“作者”列中有一个非标准字符。我已经把它涂成黄色了。

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

当我运行以下命令时:

data1

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

在扫描中(文件 = 文件,什么 = 什么,sep = sep,报价 = 报价,dec = dec, : 引用字符串中的 EOF

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

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

【问题讨论】:

  • 您可以查看here
  • @akrun 我查看了您建议的链接并尝试了这个:data1

标签: r import read.csv


【解决方案1】:

一位同事想出了这个解决方案:

“原始字符是^z,几十年来它被DOS/Windows用作文件结束标记。由于UNIX系统从未使用过^z,所以读入问题是Windows特有的。Windows系统经常指导用户使用“ALT”代码输入非 ASCII 字符(如 é)。这可能是 ^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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2014-08-24
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多