【问题标题】:readr forcing column type阅读器强制列类型
【发布时间】:2018-06-18 21:16:31
【问题描述】:

我正在尝试读取 CSV 文件 - 并且正在尝试强制列为某种类型。但是最后一列给了我一个错误:“is.list(col_types) 中的错误:未知快捷方式:g”

有什么建议吗?谢谢!

library(readr)

# Create data frame & write it out:
temp <- data.frame(a = 1:1001,
                   mystring_b = c(rep(NA, 1000), "1"),
                   mystring_c = c(rep(NA, 1000), "2"))
write.csv(temp, "temp.csv", row.names = F)

# Grab its names:
temp_labels <- names(read_csv("temp.csv", n_max = 0))

# Specify data type - for each column:
labels_type <- ifelse(grepl("mystring", temp_labels), "numeric", "guess")

# Reading in while forcing column types:
temp <- read_csv("temp.csv", col_types = labels_type)

# Error in is.list(col_types) : Unknown shortcut: g

【问题讨论】:

  • 您传递给col_types 参数的内容似乎与文档所说的预期不符。您是否检查过文档以验证您是如何指定列类型的?

标签: r readr


【解决方案1】:

以下是帮助页面?read_csv中对col_types的描述的摘录:

col_types

... 或者,您可以使用紧凑的字符串表示,其中每个字符代表一列:c = 字符、i = 整数、n = 数字、d = 双精度、l = 逻辑、D =日期,T = 日期时间,t = 时间,? = 猜测,或 _/- 跳过该列。

因此,正如错误消息所述,"g" 不是可接受的快捷方式。您应该改用"?"

另外,虽然read_csv 似乎幸运地从您的"numeric" 规范中获取了第一个字符,但为了安全起见,您可能应该使用"n" 来匹配文档。实际上,如果您查看示例,其意图是使用单个字符串,而不是长度 > 1 的字符串向量作为规范。同样,如果您的方法可以正常工作,那么您很幸运,但最好与文档相匹配,如下所示:

labels_type <- paste(ifelse(grepl("mystring", temp_labels), "n", "g"), collapse = "")

【讨论】:

  • 谢谢!我调整了我的标签类型如下 - 它工作:标签类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多