【发布时间】:2018-07-23 16:27:41
【问题描述】:
我有以下数据:
mydata <- data.frame(VAR1 = c("A", "A", "A", "A", "A", "A", "B", "B", "B",
"B", "B", "B", "C", "C", "C", "C", "C", "C",
"D", "D", "D", "D", "D", "D", "E", "E", "E", "E", "E", "E"),
VAR2 = c("A1", "A1", "A1", "A2", "A2", "A2", "B1", "B1", "B1",
"B2", "B2", "B2", "C1", "C1", "C1", "C2", "C2", "C2",
"D1", "D1", "D1", "D2", "D2", "D2", "E1", "E1", "E1", "E2", "E2","E2"),
VAR3 = c("alpha", "beta", "gamma", "alpha", "beta", "gamma", "alpha", "beta", "gamma", "alpha",
"beta", "gamma", "alpha", "beta", "gamma", "alpha", "beta", "gamma", "alpha", "beta",
"gamma", "alpha", "beta", "gamma", "alpha", "beta", "gamma", "alpha", "beta", "gamma"),
VALUE = c(56, 38, 83, 29, 73, 75, 99, 88, 30, 58,
97, 42, 64, 67, 45, 99, 62, 65, 7, 40,
49, 62, 82, 63, 65, 40, 45, 29, 73, 51))
我想以宽格式转置数据,其中 VAR1 和 VAR2 是列,VAR3 的值将是 3 个额外的列,VALUE 列将填充为此结构中的值。
我的问题是如何使用 tidyverse 和 data.table::dcast 来做到这一点?如果数据量非常大,比如 2 GB 的原始格式(我的 RAM 大小是 8 GB),哪个会更有效?
谢谢!
【问题讨论】:
-
tidyr/tidyverse 方式将是简单的
mydata %>% spread(VAR3,VALUE) -
@moody:感谢您的快速回复。在“tidyr”中,您为什么不考虑传播其他 2 个变量?
-
和
data.table::dcast在常规data.frames 上使用时是reshape2::dcast的包装,reshape2几乎是tidyr的祖先 -
默认情况下未提及的列是
spread中的分组列
标签: r