泰坦尼克号是 R 中的数据集,其类别为" table"。
dim(Titanic)
告诉它是4维的。
现在,如果我做了
x <- Titanic
y <- melt(x)
y看起来像一个二维数据框。 我的问题是,如何将y改回x?我能得到的最接近的是
z <- table(y)
但是那时z是5维的。
有人能帮帮我吗?
答案 0 :(得分:1)
我无法找到现有功能来执行此操作。但是,在使用dput
查看reshape2::melt(Titanic)
的输出后,我们可以使用其中的部分内容并将正确的内容提供给reshape2::acast
至&#34; unmelt&#34;表:
library(reshape2)
unmelt_table <- function(melted_table, value.name = "value") {
premelt_dimnames <- names(melted_table)[names(melted_table) != value.name]
premelt_dimlabels <- sapply(premelt_dimnames, function(n)
levels(getElement(melted_table, n))
)
formula_colnames <- rev(premelt_dimnames)
recast_formula <- as.formula(paste0(". ~ ", paste(formula_colnames, collapse = " + ")))
premelt_vec <- as.vector(acast(melted_table, recast_formula))
structure(premelt_vec,
.Dim = as.vector(sapply(premelt_dimlabels, length)),
.Dimnames = premelt_dimlabels,
class = "table")
}
要验证它是否有效,请运行以下命令:
> identical(Titanic, unmelt_table(melt(Titanic)))
[1] TRUE
答案 1 :(得分:1)
melt
的结果reshape2::melt(Titaninc)
没有多少。与as.data.frame(Titanic)
的结果进行比较。唯一的区别是&#39;数字&#39;专栏(value
vs Freq
)。
通过执行class(Titanic)
和?table
,您会发现Titanic
是来自table()
函数的数据类型。在文档中,您还可以注意到有xtabs
,基于公式的制表界面。在xtabs
个文档中,formula
参数说明
......在左侧,可以选择性地给出一个向量或一个计数矩阵;在后一种情况下,列被解释为对应于变量的级别。如果数据已经制表,那么这很有用......
这让你有一个简单的
dt <- as.data.frame(Titanic)
xtabs( Freq ~ Class + Sex + Age + Survived, data = dt )
重建table
分类数据,如果您需要其他包作为输入。
Tto加上我的两分钱,使用交叉表以简单的二维data.frame
或更好tibble
来自tidyverse
更加明智!