【问题标题】:How do I convert a 2x2 contingency table into a long format dataframe? [duplicate]如何将 2x2 列联表转换为长格式数据框? [复制]
【发布时间】:2016-02-08 14:51:39
【问题描述】:

如何将 2x2 列联表转换为长格式数据框? 我试过这个:

library(reshape2)
Table <- matrix(c(7,67,19,71), 2, 2, byrow=TRUE)
rownames(Table) <- c('Drug', 'No_Drug')
colnames(Table) <- c('Comp', 'No_Comp')
melt(Table)

我得到的是这个,而不是按 Drug vs. No_Drug 分类的 164 行的数据框

  Var1    Var2 value
1    Drug    Comp     7
2 No_Drug    Comp    19
3    Drug No_Comp    67
4 No_Drug No_Comp    71

【问题讨论】:

  • 你的预期输出是什么?
  • data.frame(expand.grid(rownames(Table), colnames(Table)), value = c(Table))?
  • 所有这些标签,没有r标签

标签: r reshape2 tidyr splitstackshape


【解决方案1】:

据我了解,您正在尝试将 4x3 熔融 data.frame 转换为 164x2 data.frame。你可以试试splitstackshape包中的expandRows()

扩展(复制)data.frame 或 data.table 的行 由固定数字、指定向量或包含在其中之一中的值 源 data.frame 或 data.table 中的列。

在你的情况下,只需这样做:

library(splitstackshape)
m <- melt(Table)
expandRows(m, "value") 

注意:这是对基础 R 的方便包装:

out <- m[rep(sequence(nrow(m)), m[["value"]]), ]
out[["value"]] <- NULL

【讨论】:

  • 我建议版主为包splitstackshape添加标签
  • @FTF 我添加了标签。如果您碰巧有与此软件包相关的问题,您将能够使用它。
  • 感谢您的评论@Steven Beaupré。 library(dplyr) filter(out) ##work 也可能没有?
  • 应该是dplyr::select(out, -value)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2020-02-13
  • 2019-07-10
  • 2021-09-28
  • 1970-01-01
相关资源
最近更新 更多