我的数据框格式如下:
Species Annotation Gene Group Mean_expression
ARIRE TAR2_ARATH Tr_200_G1_i1 1 8.408
CYLIM TAR2_ARATH Tr_11_G1_i1 1 10.39
ECHPL TAR2_ARATH Tr_222_G1_i1 1 9.32
FERPI TAR2_ARATH Tr_600_G1_i3 1 11.21
ARIRE BRL2_ORYSH Tr_80_G1_i9 2 180.33
CYLIM BRL2_ORYSH Tr_320_G1_i1 2 200.227
CYLIM BRL2_ORYSH Tr_320_G1_i2 2 150.343
ECHPL BRL2_ARATH TR_111_G1_i5 2 100.209
我希望有一个数据框,其中物种是列的变量。
ARIRE CYLIM ECHPL FERPL
Group1 8.4 10.39 9.32 11.21
Group2 180.33 200.227 100.209 NA
Group2 NA 150.343 NA NA
你知道最好的方法是什么吗?我已经将数据框转换为列表并尝试了split
和reshape
,但没有取得好成绩。
任何帮助将不胜感激
答案 0 :(得分:3)
这是一个data.table
解决方案:
library(data.table)
dtt[, g := seq_len(.N), by = .(Species, Annotation)]
res <- dcast(dtt, Group + g ~ Species, value.var = 'Mean_expression')
res[, g := NULL]
res
# > res
# Group ARIRE CYLIM ECHPL FERPI
# 1: 1 8.408 10.390 9.320 11.21
# 2: 2 180.330 200.227 100.209 NA
# 3: 2 NA 150.343 NA NA
数据:
dtt <- read.table(textConnection('Species Annotation Gene Group Mean_expression
ARIRE TAR2_ARATH Tr_200_G1_i1 1 8.408
CYLIM TAR2_ARATH Tr_11_G1_i1 1 10.39
ECHPL TAR2_ARATH Tr_222_G1_i1 1 9.32
FERPI TAR2_ARATH Tr_600_G1_i3 1 11.21
ARIRE BRL2_ORYSH Tr_80_G1_i9 2 180.33
CYLIM BRL2_ORYSH Tr_320_G1_i1 2 200.227
CYLIM BRL2_ORYSH Tr_320_G1_i2 2 150.343
ECHPL BRL2_ARATH TR_111_G1_i5 2 100.209'), header = TRUE)
setDT(dtt)
来自rowid
的{{1}},上述解决方案可以进一步简化:
data.table