大型数据帧的dcast[R]
假设DF为:大型数据帧的dcast[R],r,reshape,large-data,R,Reshape,Large Data,假设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) pnr解决这个问题的简单方法是切换回旧的重塑包。这意味着使用cast而不是dcast。阿伦的评论是非常有用的,只要你能真正更新。 您可以尝试
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)
pnr解决这个问题的简单方法是切换回旧的重塑包。这意味着使用cast而不是dcast。阿伦的评论是非常有用的,只要你能真正更新。
您可以尝试使用dplyr/tidyr
函数collect/spread
或将data.frame转换为data.table
并使用dcast.data.table
。我希望它能起作用。此外,您不需要as.data.frame(cbind(
),只需data.frame(
)就足够了。前者将把所有列转换为字符,因为cbind
获得矩阵输出,矩阵只能有一个类。在您的数据中,也有character
列。请尝试库(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上搜索如何在本地安装软件包。
require(reshape2)
md <- melt(ht, id = c("pnr", "year"))
output <- dcast(md, pnr ~ value)