【发布时间】: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) -
这里不需要
melt:dcast.data.table(setDT(ht), pnr ~ diag, value.var="diag")就足够了。 -
dcast.data.table 未找到,我想我有一个旧版本。在服务器上运行,我想我不会很快看到更新
-
您可以在本地目录中安装软件包。在 StackOverflow 上搜索如何在本地安装包。
标签: r reshape large-data