【问题标题】:Handeling large datasets in R在 R 中处理大型数据集
【发布时间】:2017-09-24 20:57:30
【问题描述】:

我正在处理一个相对较大的数据集(5 个文件,每个 2GB,为您提供一个数量级的表,其中一个表是 1.5M 行 x 270 列),我使用 dplyr left_joint 函数(在这些数据集和其他小表之间)。这些表包含我不想丢失的字符串数据。然而,使用处理大型数据集的包(如 bigmemory 或 ff)会将字符串转换为因子,然后转换为数字,这意味着数据会丢失。有没有办法在不丢失信息的情况下操纵这些文件(使用我的 8GB RAM)?

【问题讨论】:

  • 我使用 SparkR 在我的 8GB RAM 笔记本电脑上处理更大的数据文件(>>5M 记录)。我尽量避免大连接,但它是可管理的。

标签: r csv dplyr ff r-bigmemory


【解决方案1】:

探索 Data.tables 以在 R 上使用大型数据集进行任何类型的处理。与 R 上的任何其他数据处理包相比,速度和效率是无与伦比的。

【讨论】:

    【解决方案2】:

    当您说使用因子时信息丢失时,我不明白。 例如,假设str 是您的字符串列之一,您可以这样做

    str <- sample(sample(letters, replace = TRUE), 
                  size = 1.5e6, replace = TRUE)
    tab.str <- sort(unique(str)) # could use `letters` as lookup table
    str.int <- match(str, tab.str)
    all.equal(tab.str[str.int], str)
    

    所以,基本上你有整数作为查找表的索引来取回你的字符串。

    但是,如果您使用 big.matrix 格式,您将无法使用 dplyr,但我认为针对您的特定情况重新实现左连接会相对容易。

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 1970-01-01
      • 2023-04-02
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多