2016-08-05 80 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

非常感謝,這工作! :) –