2014-09-29 116 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