2011-05-03 53 views
2

代碼來獲取數據幀:合併缺失值的數據幀中的R

rat_all = structure(list(frequency = c(37L, 31L, 14L, 11L, 2L, 3L), isoforms = 8:13,  
    type = structure(c("rat_all", "rat_all", "rat_all", "rat_all",    
    "rat_all", "rat_all"), .Dim = c(6L, 1L))), .Names = c("frequency",   
"isoforms", "type"), row.names = 8:13, class = "data.frame") 

rat_ensembl = structure(list(frequency = c(17L, 8L, 20L), isoforms = 8:10,      
    type = structure(c("rat_ensembl", "rat_ensembl", "rat_ensembl"    
    ), .Dim = c(3L, 1L))), .Names = c("frequency", "isoforms",     
"type"), row.names = 8:10, class = "data.frame") 

我有兩個數據幀:

frequency isoforms  type            
8   17  8 rat_ensembl            
9   8  9 rat_ensembl            
10  20  10 rat_ensembl 

frequency isoforms type             
8   37  8 rat_all             
9   31  9 rat_all             
10  14  10 rat_all             
11  11  11 rat_all             
12   2  12 rat_all             
13   3  13 rat_all 

我想將這些組合成一個數據框,但也包括缺少的 isoforms條目在rat_all數據幀中,但不是rat_ensembl 數據幀。所以我想輸出是因爲如果我rbinded 兩個數據幀組合數據幀,但增強:

11   0  11 rat_ensembl 
12   0  12 rat_ensembl 
13   0  13 rat_ensembl 

我想我可以合併做,但我風得到一個巨大的混亂我不得不放鬆一下,我最終可以按照正確的格式進行按摩,但如果我想一次爲四到五種不同的「類型」做這個,那麼這不是一個好的解決方案。我錯過了什麼?謝謝!

要清楚,我希望得到一個看起來像最後的數據幀:

 frequency isoforms  type            
1   17  8 rat_ensembl            
2   8  9 rat_ensembl            
3   20  10 rat_ensembl             
4   37  8 rat_all             
5   31  9 rat_all             
6   14  10 rat_all             
7   11  11 rat_all             
8   2  12 rat_all             
9   3  13 rat_all 
10   0  11 rat_ensembl 
11   0  12 rat_ensembl 
12   0  13 rat_ensembl 

我可以種得到它做我想做的,如果我使用:

z = merge(rat_ensembl, rat_all, by.x="isoforms", by.y="isoforms", all.y=TRUE) 
    isoforms frequency.x  type.x frequency.y type.y       
7   7   44 rat_ensembl   69 rat_all       
8   8   17 rat_ensembl   37 rat_all       
9   9   8 rat_ensembl   31 rat_all       
10  10   20 rat_ensembl   14 rat_all       
11  11   NA  <NA>   11 rat_all       
12  12   NA  <NA>   2 rat_all       
13  13   NA  <NA>   3 rat_all       
14  14   NA  <NA>   1 rat_all    

然後,理論上我可以選擇isoforms,frequency.x,type.x列和 修復它們,使它們對於rat_ensemblrat_all中的每一個都是正確的,然後是那些 數據幀在一起,但似乎應該有一些東西來直接處理它。

+0

你有什麼合併嘗試?您想要合併的常用列是什麼?頻率,亞型,類型?上述所有的?一旦確定了公共列,那麼通過指定「全部」參數來指定是否需要內部連接,左連接,右連接或外連接。另外,您是否可以使用代碼片段更新您的問題,以便人員可以將其粘貼到其R會話中?使用'dput()'並將內容粘貼到你的問題中。 – Chase 2011-05-03 15:37:34

+0

謝謝你的建議,這是非常有幫助的。我在帖子中增加了額外的信息。 – rory 2011-05-03 16:11:11

回答

2

也許你想這樣的事情

z <- merge(rat_ensembl, rat_all, all = TRUE) 

iso_diff <- setdiff(rat_all$isoforms, rat_ensembl$isoforms) 

augmented <- data.frame(frequency = 0, isoforms = iso_diff, type = "rat_ensembl", stringsAsFactors= FALSE) 

df_all <- rbind(z, augmented) 

希望有所幫助。

+0

嗨Iselzer,這似乎只是給我同樣的結果作爲綁定兩個數據幀在一起。我正在尋找一些方法來補充一些數據幀中缺少的數據。我更新了我的帖子,使其更加清晰。謝謝! – rory 2011-05-03 16:31:54

+0

@rory,我只是提出了我的想法,以包括你真正想要的東西。我不知道是否有更簡單的方法。如果有人知道它,請張貼它。 – 2011-05-03 17:10:38

+0

感謝Iselzer,setdiff函數對我來說是一個新功能。我認爲這個解決方案適用於我,但只有當我確定所有的差異都是由於一種情況才能起作用。但就我而言,情況就是如此。謝謝! – rory 2011-05-03 17:16:49