【问题标题】:Why can't R read this CSV file? [closed]为什么 R 不能读取这个 CSV 文件? [关闭]
【发布时间】:2019-09-12 14:39:56
【问题描述】:

我正在尝试将这个国家列表文件读入 R。R 似乎无法读取它,因为导入的数据集显示为空。

这是我的代码:

universe =  read.csv("country-keyword-list.csv")

没有出现错误信息。 Stata 读取文件就好了。

这是相关 CSV 文件的链接:

https://www.searchify.ca/list-of-countries/

【问题讨论】:

  • 看看this的问题。它建议read.csv("country-keyword-list.csv", fileEncoding="UTF-16LE")。也许这可以解决问题。
  • 也使用read.table 而不是read.csv。该文件没有标题,也没有逗号。
  • txt <- readLines(fl, skipNul = TRUE);txt <- txt[txt != ""] 有效。
  • 忘了说fl <- "country-keyword-list.csv"

标签: r


【解决方案1】:

@maydin 已经给出了适用于 cmets 的解决方案,但我认为展示如何自己发现它仍然很有用。请注意,UTF-16LE 编码的置信度最高。

library(stringi)

u <- "https://www.searchify.ca/wp-content/uploads/2016/09/country-keyword-list.csv"
L <- readLines(u, skipNul = TRUE)
stri_enc_detect(L)[[1]]
##      Encoding Language Confidence
## 1    UTF-16LE                1.00
## 2  ISO-8859-2       cs       0.42
## 3  ISO-8859-1       en       0.21
## 4  ISO-8859-9       tr       0.21
## 5    UTF-16BE                0.10
## 6   Shift_JIS       ja       0.10
## 7     GB18030       zh       0.10
## 8      EUC-JP       ja       0.10
## 9      EUC-KR       ko       0.10
## 10       Big5       zh       0.10

countries <- read.table(u, fileEncoding = "UTF-16LE")

【讨论】:

    【解决方案2】:

    这不是您问题的直接答案,因为 maydin 和 G. Grothendieck 已经很好地回答了这个问题,但是如果您再次遇到文件编码格式问题,我建议您尝试使用 guess_encoding() 函数readr 包,效果很好。

    install.packages("readr")
    readr::guess_encoding("country-keyword-list.csv", n_max = 1000)
    

    它会给出这样的输出:

      # A tibble: 3 x 2
      encoding   confidence
      <chr>           <dbl>
    1 UTF-16LE         1.00   
    2 ISO-8859-1       0.51
    3 ISO-8859-2       0.38
    

    它在大多数情况下都能很好地工作,因此您几乎可以确定要选择哪种编码。

    【讨论】:

    • 哦,那是救生员!我正在玩编码,但我尝试过的所有编码都不起作用。这样可以节省很多时间。非常感谢!
    • 很高兴我能提供帮助,请注意,大多数情况下它会很好用,但有时您必须仔细检查!它绝对是一个出色的功能。
    • reader::guess_encoding 调用 stringi::stri_enc_detect,这才是真正的工作。
    • 确实在guess_encoding() 文档中。但是stri_enc_detect 不是仅适用于 .txt、原始或字符向量吗?
    【解决方案3】:
    universe <-  read.csv("country-keyword-list.csv", fileEncoding="UTF-16LE")
    

    【讨论】:

    • 和第一条评论一样。
    【解决方案4】:

    试试这个:

    universe =  read.csv("https://www.searchify.ca/wp-content/uploads/2016/09/country-keyword-list.csv")
    

    【讨论】: