将三列数据帧转换为矩阵

时间:2015-04-05 12:42:34

标签: r

这是问题[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

我感觉这是一个重塑数据问题,但我不知道如何重塑数据 -

1 个答案:

答案 0 :(得分:6)

你可以做到

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)

如果原始数据集是“dat”,也可以使用table

完成此操作
table(dat[c('Gene', 'Rptname')])