コンテンツにスキップ

縦持ち変換

横に並んだ列を、縦に積み直します。 月ごとに列が分かれている表を「月」と「値」の 2 列にまとめ、集計やグラフで扱える形にします。クロス集計表を縦持ちに戻す(アンピボット)操作です。

逆向き(縦を横に広げる)はクロス集計(横持ち変換)です。

入出力

ポート内容
入力データデータ
出力データキー列 + 列名の列 + 値の列 に組み替えたデータ

Spark エンジンでも動きます。

設定項目

キー列を選択必須
そのまま残す列。複数選べます。ここで選ばなかった列が縦に積まれます。

オプション

キー列以外の列名の挿入先を入力
元の列名が入る列の名前。既定は 列名 です。
中の値の挿入先を入力
元の値が入る列の名前。既定は 値 です。
中の値が0もしくは欠損値の場合行を削除する
既定は off。on にすると、値が 0 または空欄の行を出力から外します。

変換のしかた

キー列に選ばなかった列が、すべて縦に積まれます。

入力

店舗1月2月3月
渋谷12014090
新宿98110130

設定 — キー列 店舗

出力

店舗列名値
渋谷1月120
新宿1月98
渋谷2月140
新宿2月110
渋谷3月90
新宿3月130
  • 列の並びは キー列 → 列名 → 値 です
  • 行数は 元の行数 × 積まれる列数 になります
  • 行は積まれた列ごとにまとまって並びます。元の行の順ではありません

キー列にすべての列を選ぶと、入力がそのまま出ます。 積む列が残らないので、列名 と 値 の列もできません。

積む列の型が混ざるとき

型の違う列を一緒に積むと、値 の列は文字列型になります。 数値の列と文字列の列を同時に積んだ場合などです。文字列になると合計や平均が掛けられなくなるので、次のどちらかにします。

  • 混ぜたくない列をキー列に入れて残す
  • 先に列選択/削除で外しておく

積む列の型がすべて同じなら、値 の列も元の型のまま出ます。

0 と空欄を落とす

「中の値が0もしくは欠損値の場合行を削除する」を on にすると、値が入っていない組み合わせを落とせます。

商品 × 月のように組み合わせが多いデータでは、行数が大きく減ります。集計にもグラフにも影響しない行なので、落としておくと後が軽くなります。

エラーと対処

選んだ列が見つからない

キー列を選択で指定した列が入力データにないとき、またはどの条件にも 1 列も当たらないとき。前の処理で列名が変わった場合にも出ます。

対象の列が存在しません。

直し方 — キー列を選び直してください。列名が変わりうるデータでは、名前に頼らない選び方(型で選ぶ・前方一致)に変えると壊れにくくなります。

よく使う例

1. 月別の列を縦にする

お題 — 1月 2月 3月 と列が分かれた表を、グラフで使える形にしたい

入力

店舗1月2月
渋谷120140
新宿98110

設定 — キー列 店舗、列名の挿入先 月、値の挿入先 売上

出力

店舗月売上
渋谷1月120
新宿1月98
渋谷2月140
新宿2月110

月 を横軸、売上 を縦軸、店舗 を系列にすると、そのまま折れ線グラフになります。

2. アンケートの回答を縦にする

お題 — 設問ごとに列が分かれた回答データを、設問別に集計したい

入力

回答者IDQ1Q2
R00142
R00253

設定 — キー列 回答者ID、列名の挿入先 設問、値の挿入先 回答

出力

回答者ID設問回答
R001Q14
R002Q15
R001Q22
R002Q23

設問が増えても列を足すだけで済み、データ集計の設定は変わりません。

3. 空の組み合わせを落とす

お題 — 商品 × 月の表で、売れていない月の行が邪魔

入力

商品1月2月
A1000
B400

設定 — キー列 商品、「中の値が0もしくは欠損値の場合行を削除する」を on

出力

商品列名値
A1月100
B2月400

off なら 4 行すべてが残ります。

4. 複数のキーを残す

お題 — 店舗と担当者を残したまま、月の列を縦にしたい

入力

店舗担当者1月2月
渋谷田中120140

設定 — キー列に 店舗 と 担当者 の 2 つ

出力

店舗担当者列名値
渋谷田中1月120
渋谷田中2月140

5. 縦にしてから集計する

お題 — 月ごとに列が分かれた表から、月別の合計を出したい

入力

店舗1月2月
渋谷120140
新宿98110

設定 — キー列 店舗、列名の挿入先 月、値の挿入先 売上。そのあとデータ集計でキー列 月、関数「合計」、集計対象列 売上

出力

月売上_合計
1月218
2月250

6. 縦にしたデータを横に戻す

お題 — 縦に積んだデータを、元の表の形に戻したい

入力

店舗列名値
渋谷1月120
新宿1月98
渋谷2月140

設定 — クロス集計(横持ち変換)で、縦に展開する列 店舗、横に展開する列 列名、関数「集計しない」、対象列 値

出力

店舗1月2月
渋谷120140
新宿98

関連