不平衡的数据帧从长到宽

时间:2016-08-05 13:56:58

标签: r dataframe

我的数据框看起来像data_long:

data_long<-as.data.frame(matrix(nrow = 10, ncol = 2))
colnames(data_long)<-c("treatment","rolls")
data_long[,1]<-c(1,2,3,4,1,2,3,1,2,1)
data_long[,2]<-c(6,6,6,6,6,6,6,6,6,6)

我想将data_long重新排列为data_wide:

data_wide<-as.data.frame(matrix(nrow = 4, ncol=4))
colnames(data_wide)<-c("Treatment1","Treatment2","Treatment3","Treatment4")
data_wide[,1]<-c(6,6,6,6)
data_wide[,2]<-c(6,6,6,NA)
data_wide[,3]<-c(6,6,NA,NA)
data_wide[,4]<-c(6,NA,NA,NA)

我认为问题是,我的数据不平衡。有任何想法吗?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用spread包中的tidyr功能:

library(dplyr)
library(tidyr)

data_long %>% 
  group_by(treatment) %>% 
  mutate(unique_id = 1:n()) %>% 
  spread(treatment, rolls)

为了使spread正常工作,治疗组中的每一行都需要有唯一的标识符。