我在R中有一个数据框,其中行是基因名称,列是基因本体ID,所以它看起来像这样:
Gene V1 V2 V3
Gene 1 GO1 GO2 GO3
Gene 2 GO2
Gene 3 GO2 GO3
我试图重新排列它,以便行是唯一的基因本体ID,每个匹配这些ID的基因都在该行的单独列中:
GO V1 V2 V3
GO1 Gene1
GO2 Gene1 Gene2 Gene 3
GO3 Gene1 Gene3
我研究了reshape2,但它似乎对这种重组没什么用。有没有一种简单的方法可以做到这一点,我忽略了?
感谢您的帮助!
答案 0 :(得分:2)
可以使用melt/dcast
完成此操作。转换' data.frame'到' data.table' (setDT(df1)
),重塑成长期'格式为melt
(来自data.table
),根据' GO'和dcast
删除空白行' long'广泛'
library(data.table)
dcast(melt(setDT(df1), id.var = "Gene", value.name = "GO")[GO != ""],
GO ~ paste0("V", rowid(variable)), value.var = "Gene", fill="")
# GO V1 V2 V3
#1: GO1 Gene 1
#2: GO2 Gene 1 Gene 2 Gene 3
#3: GO3 Gene 1 Gene 3