这非常困难。我尝试了 full_join
和 bind_cols
以及 merge
变体,但我无法完全让它工作。
我有:
> (t1 <- data.frame(x = letters[10:3], stringsAsFactors = FALSE))
x
1 j
2 i
3 h
4 g
5 f
6 e
7 d
8 c
和:
> (t2 <- data.frame(y = letters[1:4], stringsAsFactors = FALSE))
y
1 a
2 b
3 c
4 d
我认为我正在寻找的是某种类型的 full_join
,它保留两列并执行设置操作,因为我想返回此:
> data.frame(
+ x = c(letters[10:3], NA, NA),
+ y = c(NA, NA, NA, NA, NA, NA, letters[4:1])
+ )
x y
1 j <NA>
2 i <NA>
3 h <NA>
4 g <NA>
5 f <NA>
6 e <NA>
7 d d
8 c c
9 <NA> b
10 <NA> a
所以它就像一个full_join
,但保留了两列并在存在差异的地方填充了NA。例如,这只给我一列:
> full_join(t1, t2, by = c("x" = "y"))
x
1 j
2 i
3 h
4 g
5 f
6 e
7 d
8 c
9 a
10 b
最佳答案
有点hacky,但是这个有效:
full_join(
left_join(t1, t2 %>% mutate(x = y)),
left_join(t2, t1 %>% mutate(y = x))
)
x y
1 j <NA>
2 i <NA>
3 h <NA>
4 g <NA>
5 f <NA>
6 e <NA>
7 d d
8 c c
9 <NA> a
10 <NA> b
关于r - 合并列,按值对齐,当值不匹配时填充 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104286/