【问题标题】:R readr single col_typesR 阅读器单个 col_types
【发布时间】:2015-10-22 10:36:40
【问题描述】:

是否可以在readr 包中读取数据并在所有列中指定单一数据类型?类似于 base::read.tablecolClasses = "character" 或使用 as.is 参数。

除非任务、数据头、文件编码等在分析之前已经明确定义,否则我更喜欢在不更改数据类型的情况下编写加载器,然后在下游处理模式。总是对别人如何看待事物的建议持开放态度。

【问题讨论】:

  • 文档中可能有一些重要的东西。
  • 要将所有列设置为相同类型,使用nmax = 1 读取1 行以获取列数,然后使用col_types = paste(rep("c", ncol), collapse = "") 读取整个内容(对于“字符”)。跨度>
  • 我认为询问 readr 是否有能力以与read.table 中的colClasses 相同的方式回收列规范是非常合理的。我没有看到一种紧凑、直接的方法,但我认为它会在 github 上提出一个很好的功能请求。
  • 谢谢,是的,我查看了 github 上的文档和 col_types.R 文件,但没有任何反应。我同意肯定有解决方法,但可能只是默认返回基本功能,而不是做任何形式的“诡计”(出于可维护性的原因)。
  • FWIW,我有点怀疑 Hadley 是否喜欢完全回收的列规范的想法,但他可能愿意添加一种紧凑、直接的方式来告诉 readr只需将所有内容都读取为字符(或另一种类型)。

标签: r dplyr readr


【解决方案1】:

readr 0.2.2 开始,我们可以执行以下操作来读取所有列作为字符的 csv:

read_csv("path/to/file",col_types = cols(.default = col_character()))

【讨论】:

    【解决方案2】:

    将我的评论转换为答案。不,这不是内置的(此时),col_types 的文档非常清楚它的功能,这不是其中之一。鉴于col_types 的工作方式,实现这一点可能需要一个全新的参数,因为一个特性是“短”col_types 将用于限制读取的列数。

    但是,您可以编写一个包装器:

    read_table_asis = function(...) {
        n_cols = ncol(read_table(..., n_max = 1))
        read_table(..., col_types = paste(rep("c", n_cols), collapse = ""))
    }
    

    【讨论】:

    • 尽管不情愿,但最终还是采用了这个解决方案,因为它比写出所有 read.table 选项的击键次数更少......谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多