这是问题[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
我感觉这是一个重塑数据问题,但我不知道如何重塑数据 -
答案 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')])