【问题标题】:dcast for huge dataframe [R]大数据帧的 dcast [R]
【发布时间】:2015-05-13 06:07:51
【问题描述】:

假设 DF 为:

    pnr <- c(1, 1, 1, 2, 2, 3, 4, 5, 5)
    diag <- c("a", "a", NA, "b", "a", NA, "c", "a", "f")
    year <- rep(2007, 9)
    ht <- data.frame(pnr, diag, year)

现在我需要重塑:

    require(reshape2)
    md <- melt(ht, id = c("pnr", "year"))
    output <- dcast(md, pnr ~ value)

输出现在是我想要的格式。但是当我在一个 1300 万行的大型数据帧上运行它时,它会导致 R-studio 崩溃。有没有一些聪明的方法来分割数据框,做dcast,然后绑回来?

编辑:下面发布的解决方案在这种情况下不起作用,因为我无法安装。肯定有办法解决这个问题吗?

【问题讨论】:

  • 您可以尝试使用dplyr/tidyr 函数gather/spread 或将data.frame 转换为data.table 并使用dcast.data.table。我希望它有效。此外,您不需要as.data.frame(cbind(,只需data.frame( 就足够了。前者会将所有列转换为字符,因为cbind 得到一个矩阵输出并且矩阵只能有一个类。在您的数据中,还有character 列。
  • 试试library(data.table);dcast.data.table(melt(setDT(ht), id=c('pnr', 'year')), pnr~value)
  • 这里不需要meltdcast.data.table(setDT(ht), pnr ~ diag, value.var="diag") 就足够了。
  • dcast.data.table 未找到,我想我有一个旧版本。在服务器上运行,我想我不会很快看到更新
  • 您可以在本地目录中安装软件包。在 StackOverflow 上搜索如何在本地安装包。

标签: r reshape large-data


【解决方案1】:

这个案例的简单解决方案是切换回旧的 reshape 包。这意味着使用 cast 而不是 dcast。 Arun 的 cmets 非常实用,前提是可以实际更新。 Related

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多