Files
2026-02-08 11:20:43 -10:00

2.3 KiB
Vendored

Merges several columns into a single column.

Reverse operation to split

merge { columns }
    [.notNull()]
    .by(delimeter) | .by { merger } 
    [.into(column) | .intoList() ]

merger: (DataRow).List<T> -> Any

Related operations:

See column selectors for how to select the columns for this operation.

// Merge two columns into one column "fullName"
df.merge { name.firstName and name.lastName }.by(" ").into("fullName")

merger accepts a List of collected values for every row typed by their common type:

df.merge { name.firstName and name.lastName }
    .by { it[0] + " (" + it[1].uppercase() + ")" }
    .into("fullName")

When heterogeneous columns are merged, they may need to be cast to valid types in merger:

df.merge { name.firstName and age and isHappy }
    .by { "${it[0]} aged ${it[1]} is " + (if (it[2] as Boolean) "" else "not ") + "happy" }
    .into("status")

By default, when no delimeter or merger is specified, values will be merged into the List:

df.merge { colsOf<Number>() }.into("data")

Merged column values can also be exported to List:

// Merge data from two columns into List<String>
df.merge { name.firstName and name.lastName }.by(",").intoList()