为了账号安全,请及时绑定邮箱和手机立即绑定

R用tidyr传播多个列

R用tidyr传播多个列

天涯尽头无女友 2019-08-08 10:39:07
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条经验 获得超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


查看完整回答
反对 回复 2019-08-08
  • 1 回答
  • 0 关注
  • 423 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信