如何通过将相同的值写入同一行,将两个不同长度的向量写入一个数据帧?

phi*_*aba 8 merge r vector dataframe

我想将两个长度不同且值部分相等的向量写入一个数据帧。相同的值应写入同一行。

ef1 <- c('A1', 'A2', 'B0', 'B1', 'C1', 'C2')
ef2 <- c('A1', 'A2', 'C1', 'C2', 'D1', 'D2')
Run Code Online (Sandbox Code Playgroud)

如果我将它们写在一个数据框中,它看起来像这样:

df <- data.frame (ef1, ef2)
> df
  ef1 ef2
1  A1  A1
2  A2  A2
3  B0  C1
4  B1  C2
5  C1  D1
6  C2  D2
Run Code Online (Sandbox Code Playgroud)

但我想要的是这个:

> df
  ef1 ef2
1  A1  A1
2  A2  A2
3  B0  NA
4  B1  NA
5  C1  C1
6  C2  C2
7  NA  D1
8  NA  D2
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助。

mar*_*kus 6

一种选择是 match

(tmp <- unique(c(ef1, ef2)))
# [1] "A1" "A2" "B0" "B1" "C1" "C2" "D1" "D2"

out <- data.frame(ef1 = ef1[match(tmp, ef1)],
                  ef2 = ef2[match(tmp, ef2)])
Run Code Online (Sandbox Code Playgroud)

结果

out
#   ef1  ef2
#1   A1   A1
#2   A2   A2
#3   B0 <NA>
#4   B1 <NA>
#5   C1   C1
#6   C2   C2
#7 <NA>   D1
#8 <NA>   D2
Run Code Online (Sandbox Code Playgroud)