如何组合在 julia 中迭代第一行的两个数组?

问题描述 投票:0回答:1

目前我有以下两个矩阵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,但也没有找到任何合适的解决方案。非常感谢任何帮助!

julia
1个回答
1
投票

根据这里的评论,您可以在 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
类型,该类型效率低下,如评论中突出显示的那样)。

© www.soinside.com 2019 - 2024. All rights reserved.