目前我有以下两个矩阵A和B。在矩阵A中,第一行对应投资类型,第二行是投资类型债券和股票的场景数(1,2,3):
A =["bond" "bond" "bond" "stock" "stock" "stock"; 1 2 3 1 2 3; 0.1 0.12 0.13 0.14 0.15 0.16; 0.17 0.18 0.19 0.2 0.21 0.22]
在矩阵 B 中,我有债券和股票的两个值,即过去的值。
B= ["bond" "stock"; 0.31 0.32; 0.34 0.35]
我的数据由类似的数据矩阵组成,具有多种投资类型和超过 1000 个场景。如何合并这两个矩阵来为大型数据集创建以下输出:
merged_matrix = ["bond" "bond" "bond" "stock" "stock" "stock";1 2 3 1 2 3; 0.31 0.31 0.31 0.32 0.32 0.32; 0.34 0.34 0.34 0.35 0.35 0.35; 0.1 0.12 0.13 0.14 0.15 0.16; 0.17 0.18 0.19 0.2 0.21 0.22]
我在生成正确的 for 循环迭代方面遇到困难。我不确定如何使用投资类型作为识别键。我尝试将它们格式化为 DataFrame,但也没有找到任何合适的解决方案。非常感谢任何帮助!
根据这里的评论,您可以在 DataFrames.jl 中执行此操作 (我给这些列起了一些任意的名称 - 也许你可以将其更改为对你的情况更有意义的名称):
julia> using DataFrames
julia> dfA = identity.(DataFrame(permutedims(A), ["type", "v1", "v2", "v3"]))
6×4 DataFrame
Row │ type v1 v2 v3
│ String Int64 Float64 Float64
─────┼─────────────────────────────────
1 │ bond 1 0.1 0.17
2 │ bond 2 0.12 0.18
3 │ bond 3 0.13 0.19
4 │ stock 1 0.14 0.2
5 │ stock 2 0.15 0.21
6 │ stock 3 0.16 0.22
julia> dfB = identity.(DataFrame(permutedims(B), ["type", "v4", "v5"]))
2×3 DataFrame
Row │ type v4 v5
│ String Float64 Float64
─────┼──────────────────────────
1 │ bond 0.31 0.34
2 │ stock 0.32 0.35
julia> rightjoin(dfB, dfA, on="type")
6×6 DataFrame
Row │ type v4 v5 v1 v2 v3
│ String Float64? Float64? Int64 Float64 Float64
─────┼─────────────────────────────────────────────────────
1 │ bond 0.31 0.34 1 0.1 0.17
2 │ bond 0.31 0.34 2 0.12 0.18
3 │ bond 0.31 0.34 3 0.13 0.19
4 │ stock 0.32 0.35 1 0.14 0.2
5 │ stock 0.32 0.35 2 0.15 0.21
6 │ stock 0.32 0.35 3 0.16 0.22
请注意,我使用
identity.(...)
操作来使列类型具体化(因为您的原始数据具有 Any
类型,该类型效率低下,如评论中突出显示的那样)。