2015-04-05 147 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')])