当NA存在时,合并功能导致重复

时间:2014-06-05 00:27:57

标签: r merge

合并给我一个虚假的大数据帧,从而导致来自NA的重复,即使两个组成数据帧具有基本相同的内容。我之后的是一个合并的数据框,其中任何缺失的ID都有自己的列。

这是一个有两个几乎完全相同的数据帧的工作示例,只是在不同位置使用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=TRUEincomparables=NA

,就会出现相同的输出

对数据帧进行排序和整理是一个简单的解决方案,因为我想将其扩展到ID列长度不同的情况,并且可能有不同数量的NA。

基本r解决方案更受欢迎,但如果它们更优雅,我会采用基于包的解决方案。

1 个答案:

答案 0 :(得分:1)

你的合并看起来很有趣的原因是因为你传递的是字符向量而不是data.frames。这些字符向量被强制转换为data.frames,但由于它们具有不同的名称,因此每个创建的data.frame将具有不同的列名,因此当您合并两个没有重叠列名的data.frame时,您将获得完整的外部联接。 / p>

您可以在此处使用合并,但合并喜欢折叠共享列而不是复制它。既然你知道他们匹配。这是一次尝试

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>

这里我加倍了#34; a&#34;列为&#34; b&#34;在合并之前在df2中获取两列。