【问题标题】:read.csv in R doesn't import all rows from csv fileR中的read.csv不会从csv文件中导入所有行
【发布时间】:2017-08-20 07:12:26
【问题描述】:

我有一个大约 10,000 行的逗号分隔数据集。在执行 read.csv 时,R 创建的数据帧行数少于原始文件。它排除/拒绝了 200 行。 当我在 Excel 中打开 csv 文件时,该文件看起来没问题。该文件的格式适合行分隔符和字段分隔符(根据 Excel 完成的解析)。

我已经确定了文件中被拒绝的行号,但我无法通过浏览它们来确定原因。

有什么方法可以查看日志或其他内容,包括 R 拒绝这些记录的原因?

【问题讨论】:

  • 这 200 个拒绝是随机播种的,还是它们位于您数据的特定区域?你见过http://stackoverflow.com/questions/13706188/importing-csv-file-into-r-numeric-values-read-as-characters
  • 它们位于数据的一个区域中。它们是连续的记录
  • 与您分享的链接中的案例不同,我没有在 Excel 上进行任何数据操作。我在 R 上打开了原始数据。我只在 Excel 上打开了数据以查看已解析的数据。没有更改文件。
  • 请您打开文本文件中的 csv 文件并将其中几行复制到您的帖子中。还请包括您用于将数据读入 R 的确切代码
  • 一些猜测:引号有问题(你在某处有一个未转义的引号;可能在被跳过的行之前的行中);这些行以# 开头。

标签: r


【解决方案1】:

OP 表明问题是由 CSV 文件中的引号引起的。

当 CSV 文件中的记录没有被引用,但只有少数记录包含引号时。可以使用read.csv 中的quote="" 选项打开该文件。这会禁用引号。

data <- read.csv(filename, quote="")

另一种解决方案是从文件中删除所有引号,但这也会导致修改数据(您的字符串不再包含任何引号)并且会导致您的字段包含逗号的问题。

lines <- readLines(filename)
lines <- gsub('"', '', lines, fixed=TRUE)
data <- read.csv(textConnection(lines))

一个更安全的解决方案,它只会在不只是在逗号之前或之后删除引号:

lines <- readLines(filename)
lines <- gsub('([^,])"([^,])', '\\1""\\2', lines)
data <- read.csv(textConnection(lines))

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,csv 文件 中存在的行数与read.csv() 命令读取的行数之间的差异很大。我使用 data.table 包中的 fread() 命令代替 read.csv 并解决了问题。

    【讨论】:

      【解决方案3】:

      被拒绝的记录是由于 csv 文件中存在双引号。在读取 R 中的文件之前,我删除了 notepad++ 上的双引号。如果您可以建议更好的方法来删除 R 中的双引号(在读取文件之前),请在下面发表评论。

      Jan van der Laan 指出。他值得称赞。

      【讨论】:

        【解决方案4】:

        在您的最后一个问题中,您想在读取 R 中的 csv 文件之前删除双引号(即“”)。这可能最好作为使用单行 Shell 脚本的文件预处理步骤来完成“sed”评论(在 Unix 和 Linux 论坛中处理)。

        sed -i 's/""/"/g' test.csv
        

        【讨论】:

          猜你喜欢
          • 2014-03-20
          • 2016-02-28
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 2014-12-14
          • 2019-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多