我有两个向量,其中某些元素是通用的:
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_join
和left_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