我遇到了fread()包中的data.table函数的问题。我知道它仍处于试验阶段,但也许我在某个地方犯了一些错误。

这是可重现的示例:

library(data.table)
test <- data.frame(a=rnorm(300), b=rnorm(300))
write.csv(test,"a.csv")
fread("a.csv")

给出一个错误:
Error in rbindlist(allargs) :
  Item 2 has 2 columns, inconsistent with item 1 which has 3 columns

还有一个问题:为什么我应该将row.names=TRUE留在write.csv问题中?到目前为止,我只遇到了问题,因为它向数据添加了一个未命名的列。

谢谢。

最佳答案

解决方法是,可以通过设置header=FALSE将行名读取为新列

fread("a.csv",header=FALSE)
header' changed by user from 'auto' to FALSE
      V1                 V2                 V3
  1:                      a                  b
  2:   1  -1.55640470495795    -1.344760319214
  3:   2   2.89752713867643   2.48413035874463
  4:   3 -0.493990961968582  0.119727513514055
  5:   4  0.559770137546773   1.07420769675405
 ---
297: 296  0.585750601363698  -1.59845801200953
298: 297 -0.867339301988422  0.776738489388772
299: 298 0.0942821874550108 -0.649440075398178
300: 299 -0.308039637386426 -0.840171787291445
301: 300  0.358526722813896    -1.362322309472

fread的帮助下,看起来所有示例都在使用row.names=FALSE,因此正如您所提到的,这很好用:
write.csv(test,"b.csv",row.names=FALSE)
fread("b.csv")

关于通过fread()使用row.names读取CSV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15448732/

10-13 00:32