【问题标题】:Importing CSV file by read.csv but the function recognize wrong number of columns通过 read.csv 导入 CSV 文件,但该函数识别错误的列数
【发布时间】:2021-10-01 13:53:31
【问题描述】:

我尝试从这里导入 CSV 文件:https://covid19.who.int/WHO-COVID-19-global-table-data.csv 使用 read.csv 函数:

WHO_data <- read.csv("https://covid19.who.int/WHO-COVID-19-global-table-data.csv")

但我得到的 WHO_data 有 12 列,并将第一列识别为行名。 我通过获取 tibble 而不是数据框尝试了另一种方法:

library(readr)
WHO_data <- read_csv("https://covid19.who.int/WHO-COVID-19-global-table-data.csv")

然后它给出以下错误:

    Warning: 1 parsing failure.
row col   expected     actual                                                         file
  1  -- 12 columns 13 columns 'https://covid19.who.int/WHO-COVID-19-global-table-data.csv'

谁能帮我解释一下为什么会发生这种情况以及如何解决这个问题?

【问题讨论】:

  • read_csv 不会生成错误,而是会生成警告。但它可以正确读取数据。

标签: r csv


【解决方案1】:

文件的格式似乎不正确。第二行末尾有一个额外的逗号。您可以读取原始行数据,删除逗号,然后传递给 read.csv。例如

file <- "https://covid19.who.int/WHO-COVID-19-global-table-data.csv"
rows <- readLines(file)
rows[2] <- gsub(",$", "", rows[2])
WHO_data  <- read.csv(text=rows)

【讨论】:

  • 非常感谢您的解释和解决方案。这非常有效!
【解决方案2】:

这是基于data.table 包的另一种解决方案。如果你想返回一个data.frame(而不是data.table),你可以另外为fread函数指定参数data.table=FALSE

library(data.table)

file <- "https://covid19.who.int/WHO-COVID-19-global-table-data.csv"

WHO_data <- fread(file, select=1:12, fill=TRUE)

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 2021-10-18
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多