たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

KNIME_行で分割【Unpivoting】【Joiner】

使用Node:Unpivoting/joiner/他
ひとつのセルを、行で分割(縦に配置)する
今回は、最初にカラムのレコードの値をconcatしひとつのセルにまとめてから、それを分割して最初の状態に戻す

WFの例

▼配置例▼


Node【Table Creator】設定

▼設定例▼
今回は、「testA」カラムの値をすべて1つのセルにつなげて列方向にsplitしたものを行方向に配置(行で分割)することで
最終的に「testA」と同じ状態に戻す



Node【Groupby】レコードの値をconcat

▼設定例1▼
今回の例では、タブ「groups」の画面では「Group column(s)」には何も加えない


▼設定例2▼
タブ「Manual Aggregation」画面にてconcatしたいカラムを指定(左のボックス内のカラム名をダブルクリックで右ボックスに追加)
区切り文字には例として「,」を指定した

▼実行結果▼


Node【Cell Splitter】列に分割

▼設定例▼
concatしたセルを列方向に分割

▼実行結果▼

ところで【Cell Splitter】の設定は奥深い、いろいろと設定できるので理解して使用していきたい
▼本当によくわかる解説サイト▼
KNIME - セルをぶった切る ~Cell Splitter~ - デジタル推進課

Node【Unpivoting】行に分割

▼設定例1▼
タブ「options」の画面で、分割したいカラムだけを右側のボックスに残す


▼実行結果▼
カラム「ColumnValues」にて、縦に配置(行で分割)され、「testA」と同じ内容となっていることがわかる

Node【Joiner】元のリストとJoin

▼設定例1▼
タブ「Joiner Settings」にて結合カラムを指定
今回は「RowID」を利用したが、最初のリストと現在のリストとで同じ内容のカラムがあればそれを結合カラムとすればよい


▼設定例2▼
不要なカラムは左側に移動



▼実行結果▼
最後にカラム名「ColumnValues」をrenameし、最終的に以下のような結果となる、「testB」がsplitを経たカラム


【参考】縦に値を埋める

一つ前の画像のカラム「string2」のnullレコードを、一番上のレコードの値で埋めたい場合には
【Unpivoting】を使用して生成されたカラム「RowIDs」を活用し【Joiner】で結合すればよい

▼実行結果▼

設定についてはKNIME Hubを参照


▼KNIME Hub▼
hub.knime.com

※※ご注意※※
以前、以下の2記事で「カレントカラムが空白の場合に一つ上のレコードを参照」する方法を紹介したが
上述の「【7 参考】縦に値を埋める」の例は一つ上のレコードを参照しているわけではないことを記しておく
tama-shi.hatenadiary.com tama-shi.hatenadiary.com