r语言 - 将两个向量与公共元素对齐



我有两个向量,其中某些元素是通用的:

v1= c('a', 'b', 'c')
v2 = c('b', 'c', 'd')

我想将向量组合成两个data.frame。首先,我想要来自两个向量的所有元素,并且任一向量中的不匹配位置应替换为NA

v1   v2
a    NA
b    b
c    c
NA   d

在第二个数据框中,我想要来自第一个向量的元素和第二个向量中的相应匹配项:

v1   v2
a    NA
b    b
c    c

最好的方法是什么?

获取第一个

mergedf=merge(data.frame('key'=v1,v1),data.frame('key'=v2,v2),by='key',all=T)
mergedf
key   v1   v2
1   a    a <NA>
2   b    b    b
3   c    c    c
4   d <NA>    d

获取第二个 df

mergedf[!is.na(mergedf$v1),]
key   v1   v2
1   a    a <NA>
2   b    b    b
3   c    c    c
4   d <NA>    d

可以选择基于dplyr的解决方案。您可以将full_joinleft_join用作:

library(dplyr)
v1= c('a', 'b', 'c')
v2 = c('b', 'c', 'd')
full_join(data.frame(key=v1, v1, stringsAsFactors = FALSE),
data.frame(key=v2, v2, stringsAsFactors = FALSE), by="key") %>%
select(-key)
#     v1   v2
# 1    a <NA>
# 2    b    b
# 3    c    c
# 4 <NA>    d

left_join(data.frame(key=v1, v1, stringsAsFactors = FALSE),
data.frame(key=v2, v2, stringsAsFactors = FALSE), by="key") %>%
select(-key)
#   v1   v2
# 1  a <NA>
# 2  b    b
# 3  c    c

最新更新