2016-08-05 75 views
0

我有一个数据帧,看起来像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) 

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

回答

2

可以使用spread函数从tidyr包:

library(dplyr) 
library(tidyr) 

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

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

+0

Hei Mark,谢谢你的回答。我已经尝试了类似的东西,但它不起作用。出现此消息:错误:行重复标识符。问题是我在治疗中有不同数量的人(T1中23例,T2中20例,T3中19例,T4中17例),因此难以创建标识符列... –

+0

你能发表一些数据吗?这会再现您在使用收集/传播时收到的错误? –

+0

非常感谢,这工作! :) –