转置数据

时间:2018-02-13 10:25:34

标签: r

我有以下数据:

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&amp; VAR2是列,VAR3的值将是3个额外列,VALUE列将在此结构中填充为值。

我的问题是如何使用tidyverse&amp; amp; data.table :: dcast?如果数据量非常大,那么效率会更高,比如原始格式为2 GB(我的RAM大小为8 GB)?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用dcast()中的data.table

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