R用tidyr传播多个列

时间:2015-06-02 09:22:40

标签: r dplyr tidyr

拿这个样本变量

df <- data.frame(month=rep(1:3,2),
                 student=rep(c("Amy", "Bob"), each=3),
                 A=c(9, 7, 6, 8, 6, 9),
                 B=c(6, 7, 8, 5, 6, 7))

我可以使用spread中的tidyr将其更改为宽屏格式。

> df[, -4] %>% spread(student, A)
  month Amy Bob
1     1   9   8
2     2   7   6
3     3   6   9

但是我如何传播两个值,例如同时AB,输出类似于

  month Amy.A Bob.A Amy.B Bob.B
1     1     9     8     6     5
2     2     7     6     7     6
3     3     6     9     8     7

1 个答案:

答案 0 :(得分:155)

使用e.preventDefault();

,这是一个简单且非常有效的解决方案
data.table

或可能的library(data.table) ## v >= 1.9.6 dcast(setDT(df), month ~ student, value.var = c("A", "B")) # month Amy_A Bob_A Amy_B Bob_B # 1: 1 9 8 6 5 # 2: 2 7 6 7 6 # 3: 3 6 9 8 7 解决方案

tidyr