【问题标题】:Reading CSV with row.names by fread()通过 fread() 读取带有 row.names 的 CSV
【发布时间】:2013-03-16 11:33:15
【问题描述】:

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

这是可重现的示例:

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问题中?到目前为止,我只遇到了问题,因为它向数据中添加了一个未命名的列。

谢谢。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    作为一种解决方法,您可以通过设置 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")
    

    【讨论】:

    • 那么row.names=TRUE 的用处呢? :)
    • @tomaskrehlik 好问题:) 我个人不使用它...也许是为了文件的人类可读性..
    • @tomaskrehlik 和 agstudy 一样,我也不真正使用行名。为了完整起见,我添加了一个待办事项来处理它们以及返回这个问题的链接。感谢您强调。
    猜你喜欢
    • 2020-03-16
    • 2020-11-04
    • 2017-08-16
    • 2015-12-10
    • 1970-01-01
    • 2012-09-07
    • 2013-07-08
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多