Eu tenho dois tibbles com valores únicos, com comprimentos desiguais, como:
df1 <- structure(list(col1 = c("A", "T", "C", "D", "X", "F")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L))
df2 <- structure(list(col2 = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L))
> df1
# A tibble: 6 × 1
col1
<chr>
1 A
2 T
3 C
4 D
5 X
6 F
> df2
# A tibble: 9 × 1
col2
<chr>
1 A
2 B
3 C
4 D
5 F
6 G
7 H
8 I
9 J
Eu gostaria de obter:
> df3
# A tibble: 11 × 2
col1 col2
<chr> <chr>
1 A A
2 NA B
3 T NA
4 C C
5 D D
6 X NA
7 F F
8 NA G
9 NA H
10 NA I
11 NA J
Cada string idêntica em col1 de df1 e col2 em df2 deve estar na mesma linha lado a lado. Por exemplo, se uma string em col1 e col2 for a mesma, elas deverão estar na mesma linha (por exemplo, string A). Se existir uma string em col1, mas não em col2, ela deverá ser NA em col2 e vice-versa.
Eu ficaria grato por qualquer conselho adicional.
Uma solução base R
dá
Outra solução base R está usando
stack
+reshape
o que dá
A opção R de terceira base está usando
table
o que dá
Referência
mostra
Uma solução básica usando
merge
, adicionando uma nova coluna para mesclar e removê-la posteriormente.