【问题标题】:fread is not reading the columns names properlyfread 没有正确读取列名
【发布时间】:2021-02-16 14:44:21
【问题描述】:

我正在尝试使用从 Apple 移动报告生成的 csv,可以在 here 找到。

现在一切正常,我能够按预期获得 .csv,它看起来像这样的文本:

csvtxt <- "geo_type,region,2020-01-14,2020-01-15,2020-01-16
country/region,Albania,50.1,100.2,75.3"

但是当我 fread 它时,第一行(不出所料是列名行)不会被识别为如此,即使使用我在此处某处找到但无法再次找到的选项 check.names = FALSE

library(data.table)
fread(csvtxt, check.names = FALSE)
#               V1      V2         V3         V4         V5
#1:       geo_type  region 2020-01-14 2020-01-15 2020-01-16
#2: country/region Albania       50.1      100.2       75.3

有没有办法让这些数据导入,以便正确识别列名行?

【问题讨论】:

  • 您能否跳过所有curl 下载部分并将问题减少到几行csv 行,这些行与fread 无法正常工作?如果到目前为止一切正常,则可能不需要将其包含在问题中,并且会使该问题对未来的读者更加通用。
  • 您的代码对我来说很好,fread(paste0(Chemin,"AMR","_",today(),".csv"), header = TRUE) (R 版本 4.0.2,data.table_1.13.2) 您需要通过设置为 TRUE 来强制它,因为您有 "invalid" 名字。
  • @zx8754 我想我只是无法正确阅读文档...谢谢
  • @AnthonyMartin - 我已尝试进行编辑,将问题简化为问题的核心。请问可以检查一下吗?
  • @zx8754 - 我认为值得添加答案 - 我不知道这个问题或解决它的方法,所以至少有人会觉得它有益。

标签: r csv import download data.table


【解决方案1】:

我们需要通过将其设置为 TRUE 来强制标头。

library(data.table) # R version 4.0.2, data.table_1.13.2

fread(csvtxt, header = TRUE)
#          geo_type  region 2020-01-14 2020-01-15 2020-01-16
# 1: country/region Albania       50.1      100.2       75.3

来自手册:

标题
第一个数据行是否包含列名?根据第一数据行上的每个非空字段是否为默认值 键入字符。如果是这样,或者提供了 TRUE,则任何空列名都是 给定一个默认名称。

混淆可能来自 read.csv,其中 header 默认为 TRUE:

read.csv(text = csvtxt)
#         geo_type  region X2020.01.14 X2020.01.15 X2020.01.16
# 1 country/region Albania        50.1       100.2        75.3

【讨论】:

  • 我认为这里的陷阱是存在不包含任何字母的列名。如果我将文件更改为 "A2020-01-14,A2020-01-15,A2020-01-16" 它就可以了。
  • @thelatemail 是的,也注意到了这一点。手册的措辞对我来说不是很清楚。我检查了 fread 的源代码,看起来标题“猜测”是使用 yaml 包完成的。
  • 随时编辑更多细节。对我来说,“2020-01-15”是一个有效的“字符”类型字符串。
  • Yaml 包不用于猜测标头,如果标头在 csv(又名 CSVY)内的 yaml 标头中提供,则用于获取标头。如果 csv 中没有 yaml 标头,那么我预计猜测会发生在 C 中的某个地方。
  • @jangorecki 谢谢,不知道怎么写,请随时编辑以添加更多细节。
猜你喜欢
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2014-09-30
  • 2016-06-24
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多