【问题标题】:readr::read_csv("file.csv", col_types = rep("c", times = 18)) gives Error: not compatible with STRSXPreadr::read_csv("file.csv", col_types = rep("c", times = 18)) 给出错误:与 STRSXP 不兼容
【发布时间】:2016-04-09 12:07:11
【问题描述】:

我正在尝试读取一个相当简单的 csv 文件,但是当我尝试指定列类型时,readr 会引发错误。这是我的数据的一个小sn-p:

text <- "Item,Date,Time,SeizureTime,ET,OriginatingNumber,TerminatingNumber,IMEI,IMSI,CT,Feature,DIALED,FORWARDED,TRANSLATED,ORIG_ORIG,MAKE,MODEL,TargetNumber
3,10/31/2012,7:53:00,0:15,1:43,(123)555-1216,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
4,10/31/2011,9:04:00,0:25,0:00,(123)555-0214,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
9,10/31/2014,9:08:00,0:11,2:13,(123)555-8555,(132)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
12,10/31/2011,9:27:00,0:07,0:10,(123)555-0214,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
13,10/31/2015,9:35:00,0:27,0:00,(123)555-0214,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662
16,10/31/2011,10:09:00,0:10,14:13,(123)555-1216,(123)555-5662,,,MO,[],,11235552511,,,,,(123)555-5662"

dat <- read.table(text = text, sep = ",", header = TRUE)

当尝试使用 read_csv("file.csv", col_types = rep("c", times = 18)) 读取实际 CSV 时,我收到标题中提到的错误。我已经看到了几个关于这个错误的 SO 问题,它们似乎都与后台发生的 C++ 函数有关,但我不知道如何解决它。如果我去掉 col_types 参数,错误就会消失,但它不能正确解析数据。

【问题讨论】:

  • @PierreLafortune 当我在读取实际文件时从参数中删除col_types 时,我得到:警告:200221 解析失败。 row col 预期实际 1 时间有效日期 7:53:00 2 时间有效日期 9:04:00 3 时间有效日期 9:08:00 4 时间有效日期 9:27:00 5 时间有效日期 9:35:00 。 .. .... .... .... ....... .有关更多详细信息,请参阅问题(...)。
  • 这不是错误,只是警告。您可以使用problems(read_csv(text))[,4] 检索丢失的列

标签: r csv readr


【解决方案1】:

当您指定使用 rep("c", times=18) 的列时,但这会创建一个包含 18 个元素的向量。在?read_csv 的帮助中,col_types 参数采用一串列快捷方式,例如"ccccdc"。所以我们将 c 粘贴在一起形成一个字符串:

read_csv(text, col_types=paste(rep("c", 18), collapse=""))
Source: local data frame [6 x 18]

   Item       Date     Time SeizureTime    ET
  (chr)      (chr)    (chr)       (chr) (chr)
1     3 10/31/2012  7:53:00        0:15  1:43
2     4 10/31/2011  9:04:00        0:25  0:00
3     9 10/31/2014  9:08:00        0:11  2:13
4    12 10/31/2011  9:27:00        0:07  0:10
5    13 10/31/2015  9:35:00        0:27  0:00
6    16 10/31/2011 10:09:00        0:10 14:13

【讨论】:

  • 不错。不过,这是传递列类的一种奇怪方式。
  • 呃...我不敢相信我错过了。它始终是最简单的解决方案。谢谢!
  • 另一种方法是read_csv(text, col_types = cols(.default = 'c'))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2014-02-18
相关资源
最近更新 更多