【问题标题】:Create fake data to recreate a contingency table创建假数据以重新创建列联表
【发布时间】:2018-03-04 02:59:36
【问题描述】:

是否可以创建假数据来重新创建列联表?

例如:

originalTable <- matrix(c(188, 29, 20, 51), ncol = 2, byrow = TRUE)
colnames(originalTable) <- c("A", "B")
rownames(originalTable) <- c("C", "D")

是否可以从包含 288 对与表匹配的观察值的表中生成数据框?

我找到了 r2dtable 函数,但知道如何提取或保存为数据框吗?

r2dtable(1, c(217, 71), c(208, 80))

提前致谢

【问题讨论】:

标签: r dataframe reshape


【解决方案1】:

您可以使用我的“splitstackshape”包中的expandRows:

library(splitstackshape)
expandRows(data.frame(as.table(originalTable)), "Freq")
#       Var1 Var2
# 1        C    A
# 1.1      C    A
# 1.2      C    A
# 1.3      C    A
# 1.4      C    A
# -----
# 1.19     C    A
# 1.20     C    A
# 1.21     C    A
# 1.22     C    A
# 1.23     C    A
# 1.24     C    A
# 1.25     C    A
# 1.26     C    A
# 1.27     C    A
# -----
# 4.43     D    B
# 4.44     D    B
# 4.45     D    B
# 4.46     D    B
# 4.47     D    B
# 4.48     D    B
# 4.49     D    B
# 4.50     D    B

nrow(.Last.value)
# [1] 288
sum(originalTable)
# [1] 288

如果您已经在处理实际的table,则不需要as.table。

当然,你也可以不打包:

data.frame(as.table(originalTable))[rep(sequence(prod(dim(originalTable))), 
                                        c(originalTable)), c(1, 2)]

【讨论】:

  • 谢谢,这更简单!很棒的包,不知道,赞!
【解决方案2】:

您可以只使用该表来生成正确数量的对。

x = c()
for(row in rownames(originalTable)) {
    for(col in colnames(originalTable)) {
        x = rbind(x, matrix(rep(c(row, col), originalTable[row,col]), ncol=2, byrow=TRUE))
    }
}

df = as.data.frame(x)
table(df)
   V2
V1    A   B
  C 188  29
  D  20  51

【讨论】:

  • 太棒了,这正是我正在寻找的!我试图重新创建一些我在教科书和论文中找到的数据集。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2014-07-14
  • 2019-05-16
  • 2020-05-12
  • 1970-01-01
相关资源
最近更新 更多