合并给我一个虚假的大数据帧,从而导致来自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=TRUE
,incomparables=NA
)
对数据帧进行排序和整理是一个简单的解决方案,因为我想将其扩展到ID列长度不同的情况,并且可能有不同数量的NA。
基本r解决方案更受欢迎,但如果它们更优雅,我会采用基于包的解决方案。
答案 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
中获取两列。