【问题标题】:How to specify column types with abbreviations when skipping columns with read_csv使用 read_csv 跳过列时如何使用缩写指定列类型
【发布时间】:2022-01-09 09:52:39
【问题描述】:

我想使用 readr 包中的 cols 函数支持的缩写从 CSV 文件中读取选定的列。但是,当我跳过列时,readr 会尝试猜测列类型,而不是使用我的规范,除非我按名称指定列或设置默认值。

这是一个可重现的例子:

library(tidyverse)

out <- tibble(a = c(1234, 5678),
       b = c(9876, 5432),
       c = c(4321, 8901))

write_csv(out, "test.csv")

test <- read_csv("test.csv",
                 col_select = c(a, c),
                 col_types = "cc")

typeof(test$c)
#> [1] "double"

我可以通过明确指出列名得到正确的规范:

test2 <- read_csv("test.csv",
                 col_select = c(a, c),
                 col_types = c(a = "c", c = "c"))
typeof(test2$c)
#> [1] "character"

我还可以通过将字符设置为默认值来获得正确的规范,正如this Q&A 中所建议的那样。但我想知道是否有一种方法可以使用缩写“cc”或 - 或者 - 如何根据跳过的列生成缩写字符串来获得正确的规范。我的实际用例涉及大量跳过的列,所以我不想使用-_ 来指定跳过的列。

【问题讨论】:

  • “如果有办法使用缩写(即“cc”)得到正确的规范”这个问题的答案是肯定的,那就是使用-_ .也许您需要弄清楚的是如何根据跳过的列生成缩写字符串。
  • @neilfws 好点——我已经相应地更新了问题。

标签: r readr


【解决方案1】:

请参阅 ?read_csv 中的 col_types 文档。您可以使用_- 指定跳过的列:

read_csv("test.csv",
         col_select = c(a, c),
         col_types = "c-c")

结果:

# A tibble: 2 x 2                                                                                                                                                                                                      
  a     c    
  <chr> <chr>
1 1234  4321 
2 5678  8901

【讨论】:

  • 谢谢——我的真实用例涉及很多列,所以不能使用_-。我会相应地更新问题。
  • 在这种情况下,一些更现实的示例数据会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 2020-01-28
  • 2017-02-22
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多