💡

同じ構成の表の値を合計する

2022/09/18に公開

R とか SQL だと上手いやり方がある気がする。再発明をしている。

こんな感じの表が2つある時に

label item1 item2
A 1 2
B 2 4
C 3 6
D 4 8
label item1 item2
A 2 1
B 4 2
C 6 3
D 8 4
E 10 5

これらの B 列と C 列を足した新しい表を作りたい。尚、label はユニークで、行は増減する可能性がある。列の増減は無い。

まず、前提となる表を 2 つ作る。

$table1 = 1..4 | % { [pscustomobject]@{ label=[char](64+$_); item1=$_; item2=($_*2) } }
$table2 = 5..1 | % { [pscustomobject]@{ label=[char](64+$_); item1=($_*2); item2=$_ } }

この状態では使いにくいので、label で要素にアクセスできるよう辞書に詰め込む。

$dic1 = @{}; $table1 | % { $dic1.add($_.label, $_) }
$dic2 = @{}; $table2 | % { $dic2.add($_.label, $_) }

label を列挙する。途中の % { $_ } は、いわゆる flatten をしており、sort -u で重複する label を排除している。

$table1.label, $table2.label | % { $_ } | sort -u | % {
    [pscustomobject]@{
        label = $_
        item1 = $dic1[$_].item1 + $dic2[$_].item2
        item2 = $dic1[$_].item2 + $dic2[$_].item2
    }
}

以上

GitHubで編集を提案

Discussion

ログインするとコメントできます