更简单的方法将熔化的数据框重建为原始数据框

时间:2013-04-07 20:49:29

标签: r reshape2

如何重新创建data.framereshape2融合的library(reshape2) library(plyr) data(iris) df <- melt(iris, id.vars="Species") head(df) Species variable value 1 setosa Sepal.Length 5.1 2 setosa Sepal.Length 4.9 3 setosa Sepal.Length 4.7 4 setosa Sepal.Length 4.6 5 setosa Sepal.Length 5.0 6 setosa Sepal.Length 5.4 # Great, I'd like to get the original iris back

可重复的示例

dcast

我使用 dcast(df, Species~variable, value.var = "value") # should work but doesn't

尝试了什么
# This works but clearly it shouldn't be this hard.
ddply(df, .(Species), function(x) {
    Species <- unique(x$Species)
    x$id <- 1:dim(x)[1]
    x$Species <- NULL
    dat <- unstack(x, value~variable)
    dat$Species <- Species
    return(dat)
    })

临时解决方案

{{1}}

我错过了什么?这是显而易见的事情,但我无法弄清楚答案。我甚至可能已经在这里为其他人回答了这个问题。哎呀。

1 个答案:

答案 0 :(得分:6)

如果您添加某种形式的标记以指示项目所属的原始行,那么很容易:

require(reshape2)
iris$rn <- seq_len(nrow(iris))
molten  <- melt(iris, id.vars = c("Species", "rn"))

# just a one-liner
dcast(molten, rn + Species ~ variable)

您遇到的困难是无法确定哪些项目在一起。熔化组中的1:5行是一行吗?或者它是2:6而1是错位的?事实上融化的数据已经融化了:)