我知道一点编程可以将定长频数表格(例如
将输入矩阵中的数字求和,然后将结果转换为行数对应的
我显然为这个拼凑重建多属性数据框架(如Titanic)从高维频率表感到自豪,但是是否有一个已建立的(内置,经过实战测试的)通用逆向table()的方法,最好不依赖于特定库,知道如何处理未标记的维度,优化以使其不会在庞大的输入上窒息,并且合理地处理对应于因子和非因子观察输入的表输入?
table()
返回的表格)转换回观测数据。因此,目标是将这样一个频数表格转换为...(flower.freqs <- with(iris,table(Petal=cut(Petal.Width,2),Species)))
Species
Petal setosa versicolor virginica
(0.0976,1.3] 50 28 0
(1.3,2.5] 0 22 50
将输入矩阵中的数字求和,然后将结果转换为行数对应的
data.frame()
,单元格值从输入维度中获取。 Petal Species
1 (0.0976,1.3] setosa
2 (0.0976,1.3] setosa
3 (0.0976,1.3] setosa
# ... (150 rows) ...
通过一些调整,我建立了一个粗略的原型,也能处理更高维度的输入:
tableinv <- untable <- function(x) {
stopifnot(is.table(x))
obs <- as.data.frame(x)[rep(1:prod(dim(x)),c(x)),-length(dim(x))-1]
rownames(obs) <- NULL; obs
}
> head(tableinv(flower.freqs)); dim(tableinv(flower.freqs))
Petal Species
1 (0.0976,1.3] setosa
2 (0.0976,1.3] setosa
3 (0.0976,1.3] setosa
4 (0.0976,1.3] setosa
5 (0.0976,1.3] setosa
6 (0.0976,1.3] setosa
[1] 150 2
> head(tableinv(Titanic)); nrow(tableinv(Titanic))==sum(Titanic)
Class Sex Age Survived
1 3rd Male Child No
2 3rd Male Child No
3 3rd Male Child No
4 3rd Male Child No
5 3rd Male Child No
6 3rd Male Child No
[1] TRUE
我显然为这个拼凑重建多属性数据框架(如Titanic)从高维频率表感到自豪,但是是否有一个已建立的(内置,经过实战测试的)通用逆向table()的方法,最好不依赖于特定库,知道如何处理未标记的维度,优化以使其不会在庞大的输入上窒息,并且合理地处理对应于因子和非因子观察输入的表输入?
table
的反函数,但我猜你可以稍微改进下代码。例如,我会尝试:lev<-expand.grid(dimnames(mytable));lev[rep(1:nrow(lev),as.vector(mytable)),]
- nicolaas.data.frame.table()
可以帮助我们解决一半的问题... - texbas.data.frame
,你可以这样做:DF[rep(rownames(DF), DF$Freq), -ncol(DF)]
,这看起来表面上更简单一些。 - BrodieG