R用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 Bob1 1 9 82 2 7 63 3 6 9但我怎么能傳播兩個值,例如既A和B,使得輸出是一樣的東西 month Amy.A Bob.A Amy.B Bob.B1 1 9 8 6 52 2 7 6 7 63 3 6 9 8 7
1 回答

瀟瀟雨雨
TA貢獻1833條經(jīng)驗 獲得超4個贊
這是一個簡單而有效的解決方案 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解決方案
df %>%
gather(variable, value, -(month:student)) %>%
unite(temp, student, variable) %>%
spread(temp, value)
# month Amy_A Amy_B Bob_A Bob_B
# 1 1 9 6 8 5
# 2 2 7 7 6 6
# 3 3 6 8 9 7
- 1 回答
- 0 關(guān)注
- 451 瀏覽
添加回答
舉報
0/150
提交
取消