【问题标题】:Data loss during read.csv in RR 中 read.csv 期间的数据丢失
【发布时间】:2014-10-02 15:02:31
【问题描述】:

我有一个要导入 R 的 .csv 文件,它有超过 1K 的观察值。但是,当我像往常一样使用 read.csv 函数时,导入的文件只有 21 个观察值。这很奇怪。我以前从未见过这种情况。

t <- read.csv("E:\\AH1_09182014.CSV",header=T, colClasses=c(rep("character",3),rep("numeric",22)),na.string=c("null","NaN",""),stringsAsFactors=FALSE)

谁能帮我解决问题?我正在提供指向我的数据文件的链接:

https://drive.google.com/file/d/0B86_a8ltyoL3TzBza0x1VTd2OTQ/edit?usp=sharing

【问题讨论】:

  • 看第22行——有什么奇怪的地方吗?
  • @AnandaMahto 似乎第 22 行的值很乱...... R 不能将其强制转换为 NA 值吗?
  • 文件中似乎还有很多其他行也会导致问题。您可以使用 data.table 包中的 fread 来读取整个文件。由于分散在第 4 到 25 列中的非数字值,所有列都将被强制转换为 character,但您至少会拥有整个文件,您可以从那里相应地手动清理它。
  • 试试read.csv(text = sReadLines("yourcsvfile"), your_other_arguments_to_read.csv),其中sReadLines来自:stackoverflow.com/a/15876643/1270695。让我知道这是否有效。
  • @AnandaMahto 扫描错误(文件、内容、nmax、sep、dec、quote、skip、nlines、na.strings、:scan() 预期为 'a real',得到 '26)'

标签: r csv import-from-csv


【解决方案1】:

您的数据中有一些乱七八糟的字符——比如嵌入式控制字符。

一种解决方法是以二进制模式读取文件,并在读取的文本文件上使用read.csv

This answer proposes a basic function 执行这些步骤。

函数如下所示:

sReadLines <- function(fnam) {
  f <- file(fnam, "rb")
  res <- readLines(f)
  close(f)
  res
}

您可以按如下方式使用它:

temp <- read.csv(text = sReadLines("~/Downloads/AH1_09182014.CSV"), 
                 stringsAsFactors = FALSE)

所有行都被读入了吗?

dim(temp)
# [1] 1449   25

那个问题线在哪里?

unlist(temp[21, ], use.names = FALSE)
#  [1] "A-H Log 1"  "09/18/2014" "0:19:00"    "7.866"      "255"        "0.009"  
#  [7] "525"        "7"          "4468"       "76"         "4576.76"    "20"     
# [13] "71"         "19"         "77"         "1222"       "33857"      "-3382"  
# [19] "26\032)"    "18.30"      "84.80"      "991.43"     "23713.90"   "0.85"   
# [25] "10.54" 

^^ 参见上面的[19]

因此,您将无法预先指定所有列类型 - 除非您先清理 CSV。

【讨论】:

  • 谢谢阿难。为什么我的 dim(temp) 返回一个 512 * 24 的矩阵而不是 1449?我刚刚复制了你的代码...
  • @Vicki1227,恐怕我无能为力了。我只是下载了你的 CSV 并将这个想法应用到它上面并得到了上面描述的对象......清除你的工作区并重新开始?
猜你喜欢
  • 2014-08-31
  • 2020-10-29
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多