在 R 中的数据框中将数据从行重塑为列

Reshape data from rows to column in dataframe in R

我想重塑数据框中的以下形式的数据:

a  b  Type_c d  e  
1  1   0     10 9
2  1   0     20 9 
3  2   1     30 4
4  2   2     40 3
5  3   3     50 2
6  3   0     60 1
7  4   3     70 2
8  4   2     80 7 
9  4   2     90 8

并希望通过整形或转换得到以下格式的数据。

a  b  Type_0_d Type_0_e Type_1_d Type_1_e type_2_d type_2_e type_3_d  type_3_e  
1  1  10       9          0        0         0      0         0          0
2  1  20       9          0        0         0      0         0          0
3  2  0        0          30       4         0      0         0          0
4  2  0        0          0        0        40      3         0          0
5  3  0        0          0        0         0      0        50          2
6  3  60       1          0        0         0      0         0          0
7  4  0        0          0        0         0      0        70          2
8  4  0        0          0        0        80      7         0          0
9  4  0        0          0        0        90      8         0          0

我发现在 R 中做同样的事情并不困难。但是,在 Tableau 中它很简单。只是想知道是否有一种方法可以在 R 中有效地做同样的事情。

我们可以使用 data.table 中的 dcast,它可以包含多个 value.var

library(data.table)
dcast(setDT(df1), a+b ~paste0("Type_", Type_c), value.var = c("d", "e"), fill = 0)

另一个选项可能使用 tidyr 包的 spread

library(dplyr)
library(tidyr)
df1 %>% mutate(e1=Type_c) %>% spread(key = Type_c,value = d,fill = 0) %>% spread(key =e1,value = e,fill = 0)

我知道这是一个糟糕的解决方案,但它仍然可以正常工作。欢迎任何有关修改代码的建议。还有一件事我们必须正确重命名列。