如何将两个向量与r中的公共元素对齐

时间:2018-08-23 16:54:34

标签: r

我有两个向量:

addClass

我需要两个数据框:

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

和:

v1   v2
a    NA
b    b
c    c
NA   d

最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

获取第一个

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

答案 1 :(得分:0)

可以选择基于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