【发布时间】: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 好点——我已经相应地更新了问题。