2015-04-05 144 views
0

這是問題的延續[Get frequency using two groupings in a dataframe轉換三列數據幀到矩陣

我有一個數據幀如下:

Gene Rptname freq 
Gene1 Cha1  1 
Gene1 Cha2  1 
Gene1 Cha3  1 
Gene1 Cha4  1 
Gene2 Cha1  1 
Gene2 TH1  2 
Gene2 KI2  2 
Gene2 Cha4  2 
Gene2 Cha5  4 

我想數據框轉換成以下格式

 Cha1 Cha2 Cha3 Cha4 Cha5 KI2 TH1 

Gene1 1  1  1  1  0 0 0 
Gene2 1  0  0  2  4 2 2 

我有一種感覺,這是一個重塑數據的問題,但我不知道如何重塑數據 -

回答

5

你可以做

xtabs(freq~., df1) 
#   Rptname 
#Gene Cha1 Cha2 Cha3 Cha4 Cha5 KI2 TH1 
# Gene1 1 1 1 1 0 0 0 
# Gene2 1 0 0 2 4 2 2 

或者

library(reshape2) 
acast(df1, Gene~Rptname, value.var='freq', fill=0) 
#  Cha1 Cha2 Cha3 Cha4 Cha5 KI2 TH1 
#Gene1 1 1 1 1 0 0 0 
#Gene2 1 0 0 2 4 2 2 

或者使用spread得到一個 'data.frame' 輸出

library(tidyr) 
spread(df1, Rptname, freq, fill=0) 

如果原始數據集是 '逸',這可能也可以用table

table(dat[c('Gene', 'Rptname')])