【问题标题】:Transpose the Data [duplicate]转置数据[重复]
【发布时间】: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))

我想以宽格式转置数据,其中 VAR1VAR2 是列,VAR3 的值将是 3 个额外的列,VALUE 列将填充为此结构中的值。

我的问题是如何使用 tidyverse 和 data.table::dcast 来做到这一点?如果数据量非常大,比如 2 GB 的原始格式(我的 RAM 大小是 8 GB),哪个会更有效?

谢谢!

【问题讨论】:

  • tidyr/tidyverse 方式将是简单的mydata %&gt;% spread(VAR3,VALUE)
  • @moody:感谢您的快速回复。在“tidyr”中,您为什么不考虑传播其他 2 个变量?
  • data.table::dcast 在常规data.frames 上使用时是reshape2::dcast 的包装,reshape2 几乎是tidyr 的祖先
  • 默认情况下未提及的列是spread中的分组列

标签: r


【解决方案1】:

您可以从data.table 使用dcast()

library(data.table)

dcast(mydata,
      VAR1 + VAR2 ~ VAR3,
      value.var = "VALUE")

哪个会返回

   VAR1 VAR2 alpha beta gamma
1     A   A1    56   38    83
2     A   A2    29   73    75
3     B   B1    99   88    30
4     B   B2    58   97    42
5     C   C1    64   67    45
6     C   C2    99   62    65
7     D   D1     7   40    49
8     D   D2    62   82    63
9     E   E1    65   40    45
10    E   E2    29   73    51

【讨论】:

  • 很高兴能为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2019-04-09
相关资源
最近更新 更多