如何使用不匹配的列名执行垂直串联?

How to perform Vertical Concatenation with mismatched column names?

我有两个 df,如下所示,

df1

│ Row │ x1    │ x2    │ x3    │
│     │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┤
│ 1   │ 8     │ 1     │ 4     │
│ 2   │ 4     │ 3     │ 1     │
│ 3   │ 7     │ 8     │ 1     │

df2

│ Row │ x1    │ x2    │ x3    │ x4    │
│     │ Int64 │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┼───────┤
│ 1   │ 20    │ 14    │ 18    │ 100   │
│ 2   │ 13    │ 19    │ 17    │ 101   │
│ 3   │ 13    │ 10    │ 16    │ 102   │

当我执行 vcat 时它抛出 ArgumentError:参数 1 中缺少 x4 列 我理解这个错误是因为列名不匹配。有什么方法我仍然可以附加这些数据帧并将 missing 放在找不到的地方。

预期输出:

6×3 DataFrame
│ Row │ x1    │ x2    │ x3    │ x4    |
│     │ Int64 │ Int64 │ Int64 │       |
├─────┼───────┼───────┼───────┤───────┤
│ 1   │ 8     │ 1     │ 4     │missing|
│ 2   │ 4     │ 3     │ 1     │missing|
│ 3   │ 7     │ 8     │ 1     │missing|
│ 4   │ 20    │ 14    │ 18    │100    |
│ 5   │ 13    │ 19    │ 17    │101    |
│ 6   │ 13    │ 10    │ 16    │102    |

只需输入:

vcat(df1, df2, cols=:union)

您可以通过查看 vcat 的帮助找到此信息:

julia> ?vcat
  
  ...

  Example
  ≡≡≡≡≡≡≡≡≡

  julia> df1 = DataFrame(A=1:3, B=1:3);

  ...

  julia> df3 = DataFrame(A=7:9, C=7:9);

  ...

  julia> vcat(df1, df3, cols=:union)
  6×3 DataFrame
  │ Row │ A     │ B       │ C       │
  │     │ Int64 │ Int64?  │ Int64?  │
  ├─────┼───────┼─────────┼─────────┤
  │ 1   │ 1     │ 1       │ missing │
  │ 2   │ 2     │ 2       │ missing │
  │ 3   │ 3     │ 3       │ missing │
  │ 4   │ 7     │ missing │ 7       │
  │ 5   │ 8     │ missing │ 8       │
  │ 6   │ 9     │ missing │ 9       │