【问题标题】:How to indicate row.names=1 using fread() in data.table?如何在 data.table 中使用 fread() 指示 row.names=1?
【发布时间】:2014-08-16 23:41:04
【问题描述】:

我想将 .csv 文件中的第一列视为 行名 序列。通常我会这样做:

read.csv("example_file.csv", row.names=1)

但我想使用data.table R 包中的fread() 函数来执行此操作,因为它运行得非常快。

【问题讨论】:

  • 不要在 data.table 中使用行名。只需将它们作为一列。
  • 如果您想在fread 之后转换为data.frame,只需使用data.frame(fread("example_file.csv"), row.names=1)。但我建议改用data.table
  • 但是我剩下的列是数字的,我想对它们应用一些函数。我希望这些只是行名,并打算使用 data.table 而不是 data.frame 这就是问题所在
  • @MattDowle 我认为这里有一些有效性,如果有人想将结果对象用作矩阵,而不是 data.frame/data.table。我正在处理一些我想应用矩阵数学的数据,并且更愿意使用 fread 来提高速度。目前我正在使用data.matrix(read.csv("myfile.csv", row.names = 1))
  • @dayne bigmemory::read.big.matrix 是否比 read.csv 快并且足够快?如果没有,请在 github 跟踪器上提交功能请求 - 谢谢。

标签: r data.table


【解决方案1】:

根据我所做的一个小搜索,data.tables never uses row names. Since data.tables inherit from data.frames, it still has the row names attribute. But it never uses them

但是,您可能可以使用this answer (similar post),然后将行名列设置为您的实际行名。虽然,它可能效率不高。

【讨论】:

    【解决方案2】:

    为什么不在列中保存行名

    df <- data.frame(x=rnorm(1000))
    df$row_name = row.names(df)   
    fwrite(df,file="example_file.csv")
    

    然后您可以加载保存的 CSV。

    df <- fread(file="example_file.csv")
    

    【讨论】:

      【解决方案3】:

      只有一个函数,转换为数据框

      a <- fread(file="example_file.csv")  %>% as.data.frame()
      row.names(a) <- a$V1
      

      【讨论】:

        【解决方案4】:
        X <- as.matrix(fread("bigmatrix.csv"),rownames=1)
        

        【讨论】:

          猜你喜欢
          • 2013-10-14
          • 2018-03-18
          • 2020-01-06
          • 2019-08-31
          • 1970-01-01
          • 2014-10-28
          • 2022-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多