2014-06-05 30 views
0

即使兩個組成數據幀具有基本相同的內容,合併也會給我一個虛假的大數據幀,導致來自NA的副本。我所追求的是一個合併的數據框,其中任何缺少的ID都有自己的列。當存在NA時導致重複的合併功能

下面是一個有兩個幾乎相同的數據框的工作示例,只是NA在不同的位置。在正常使用情況下,這些將是ID列,其中有更大的數據框與它們相關聯。

df1<-c("LJUL1994I", "GMAY1994J",NA,"WJUN1994A") 
df2<-c("LJUL1994I", NA, "GMAY1994J","WJUN1994A") 

我想是這樣工作的匹配:

LJUL1994I LJUL1994I 
GMAY1994J GMAY1994J 
WJUN1994A WJUN1994A 
<NA> 
      <NA> 

但是,我所得到的是這樣的......如果我搗鼓

merge(df1,df2) 
       x   y 
    1 LJUL1994I LJUL1994I 
    2 GMAY1994J LJUL1994I 
    3  <NA> LJUL1994I 
    4 WJUN1994A LJUL1994I 
    5 LJUL1994I  <NA> 
    6 GMAY1994J  <NA> 
    7  <NA>  <NA> 
    8 WJUN1994A  <NA> 
    9 LJUL1994I GMAY1994J 
    10 GMAY1994J GMAY1994J 
    11  <NA> GMAY1994J 
    12 WJUN1994A GMAY1994J 
    13 LJUL1994I WJUN1994A 
    14 GMAY1994J WJUN1994A 
    15  <NA> WJUN1994A 
    16 WJUN1994A WJUN1994A 

同樣的輸出情況與設置(即all=TRUE,incomparables=NA

排序和綁定數據幀是一個脆弱的解決方案,因爲我想將其擴展到ID列長度不同的情況,並且可能有不同數量的NAs。

Base r解決方案是首選,但如果它們更優雅,我會採取基於軟件包的解決方案。

+0

你希望的輸出中的「空白」與「NA」不同嗎? – MrFlick

+0

爲什麼你需要2列。除非你正在做一個交叉產品(這是發生在這裏的事情),合併產生一個單一列與兩個向量的交集。如果您可以更好地說明您的使用情況,那麼幫助起來會更容易。 –

回答

1

您的合併看起來很有趣的原因是因爲您傳遞的是字符向量而不是data.frames。這些字符向量被強制轉換爲data.frames,但由於它們具有不同的名稱,因此每個創建的data.frame將具有不同的列名稱,因此,當合並兩個沒有重疊列名的data.frames時,您將獲得完整的外部聯接。

您可以在此處使用合併,但合併喜歡摺疊共享列而不是重複它。既然你知道他們匹配。這裏有一個嘗試

df1 <- data.frame(a=c("LJUL1994I", "GMAY1994J",NA,"WJUN1994A")) 
df2 <- data.frame(a=c("LJUL1994I", NA, "GMAY1994J","WJUN1994A")) 
merge(df1, cbind(df2, b=df2$a), all=T) 

#   a   b 
# 1 GMAY1994J GMAY1994J 
# 2 LJUL1994I LJUL1994I 
# 3 WJUN1994A WJUN1994A 
# 4  <NA>  <NA> 
# 5  <NA>  <NA> 

在這裏,我在df2一倍「一」列「B」通過合併,得到兩列前。

+0

在'<-'s中有額外的空間。我會編輯但編輯必須> 5個字符 – rawr

+0

Thanks @rawr。固定。 – MrFlick

+0

感謝您在我的示例中顯示缺陷。雖然它不能解決我使用數據框時遇到的大問題,但它有助於澄清我的想法。 – user3144759