2014-09-29 95 views
2

我有一个数据集类似于这样......缺失值重塑数据

 
Id Disease  Gene Mutation Expression 
101 Disease_X Gene_A R273G  Normal 
101 Disease_X GENE_B G12D  Normal 
102 Disease_Y GENE_C L858R  High 

,我想重塑它使得每个ID和基因配对表示两个“突变和表达,甚至如果没有价值的话。例如,每个id-基因对将具有6个可能的值(3个基因用于突变,3个用于表达),并且如果在原始表格中没有用于突变或表达的值,则输出将提供一些标准输出用于缺少数据来填充该行(例如“无突变数据”)。一个表的输出是这样的:

 
Id Disease  Type  Gene Value 
101 Disease_X Mutation Gene A R273G 
101 Disease_X Mutation GENE B G12D 
101 Disease_X Mutation GENE C No Mutation Data 
101 Disease_X Expression Gene A Normal 
101 Disease_X Expression GENE B Normal 
101 Disease_X Expression GENE C No Expression Data 
102 Disease_Y Mutation Gene A No Mutation Data 
102 Disease_Y Mutation GENE B No Mutation Data 
102 Disease_Y Mutation GENE C L858R 
102 Disease_Y Expression Gene A No Expression Value 
102 Disease_Y Expression GENE B No Expression Value 
102 Disease_Y Expression GENE C High 

我知道有一个简单的方法来做到这一点(使用合并或融化?),但我还没有想出什么简单。

+0

是否有可能与(例如)'dput(head(mydata))'共享此输入的可复制版本?您也不清楚“缺失”是什么意思,因为您的示例输入中实际上没有丢失数据。你的意思是它有NA吗? – 2014-09-29 15:40:11

+0

我在电子表格上从零开始创建这个模型仅仅是为了举例的目的,所以我没有在R中,但我可以做到这一点...... – user2900006 2014-09-29 15:50:50

+0

这将有助于理解你的意思是“没有价值”原来的电子表格(你的意思是NA?)就这样,仅仅使用reshape2的融合函数可以让你非常接近这个开箱即用的问题 – 2014-09-29 16:02:05

回答

3

你需要做一些额外的步骤来得到你似乎正在寻找什么。

在下面,我首先制作“Id”,“Type”和“Gene”的所有组合,然后将其与“long”形式的数据集合并,然后修复“Disease”列。

我已经将NA作为NA,因为如果您需要做进一步的工作,对我来说似乎更有意义。

这假设你从一个名为“mydf”的数据集开始。

library(data.table) 
library(reshape2) 

DT <- as.data.table(mydf)        ## Convert to data.table 
DTL <- melt(DT, id.vars = c("Id", "Disease", "Gene")) ## Make it long 
groups <- c("Id", "Gene", "variable")     ## Save some typing 
toMerge <- do.call(CJ, lapply(DTL[, groups,    ## Generate the combos 
            with = FALSE], unique)) 
merged <- merge(DTL, toMerge, by = groups, all = TRUE) ## merge 
merged[, Disease := unique(na.omit(Disease)), by = Id][] ## Fill in Disease 
#  Id Gene variable Disease value 
# 1: 101 GENE_B Mutation Disease_X G12D 
# 2: 101 GENE_B Expression Disease_X Normal 
# 3: 101 GENE_C Mutation Disease_X  NA 
# 4: 101 GENE_C Expression Disease_X  NA 
# 5: 101 Gene_A Mutation Disease_X R273G 
# 6: 101 Gene_A Expression Disease_X Normal 
# 7: 102 GENE_B Mutation Disease_Y  NA 
# 8: 102 GENE_B Expression Disease_Y  NA 
# 9: 102 GENE_C Mutation Disease_Y L858R 
# 10: 102 GENE_C Expression Disease_Y High 
# 11: 102 Gene_A Mutation Disease_Y  NA 
# 12: 102 Gene_A Expression Disease_Y  NA 
+0

非常感谢Ananada,它工作得很好。 – user2900006 2014-10-01 20:56:13

+0

@ user2900006,好的。如果它解决了您的问题,请*考虑*“接受”它。 – A5C1D2H2I1M1N2O1R2T1 2014-10-02 04:27:20

+0

是的,它解决了。我如何正式“接受”它。环顾四周如何做到这一点... – user2900006 2014-10-02 11:58:15