66 Rename(:col₁ => :newcol₁, :col₂ => :newcol₂, ..., :colₙ => :newcolₙ)
77 Rename([:col₁ => :newcol₁, :col₂ => :newcol₂, ..., :colₙ => :newcolₙ])
88
9- The transform that renames `col₁`, `col₂`, ..., `colₙ`
10- to `newcol₁`, `newcol₂`, ..., `newcolₙ`.
9+ Renames the columns `col₁`, `col₂`, ..., `colₙ` to `newcol₁`, `newcol₂`, ..., `newcolₙ`.
10+
11+ Rename(fun)
12+
13+ Renames the table columns using the modification function `fun` that takes a
14+ string as input and returns another string with the new name.
1115
1216# Examples
1317
@@ -18,17 +22,22 @@ Rename("a" => "x", "c" => "y")
1822Rename([1 => "x", 3 => "y"])
1923Rename([:a => "x", :c => "y"])
2024Rename(["a", "c"] .=> [:x, :y])
25+ Rename(nm -> nm * "_suffix")
2126```
2227"""
23- struct Rename{S<: ColumnSelector } <: StatelessFeatureTransform
28+ struct Rename{S<: ColumnSelector ,N } <: StatelessFeatureTransform
2429 selector:: S
25- newnames:: Vector{Symbol}
26- function Rename (selector:: S , newnames) where {S<: ColumnSelector }
27- _assert (allunique (newnames), " new names must be unique" )
28- new {S} (selector, newnames)
30+ newnames:: N
31+ function Rename (selector:: S , newnames:: N ) where {S<: ColumnSelector ,N}
32+ if newnames isa AbstractVector
33+ _assert (allunique (newnames), " new names must be unique" )
34+ end
35+ new {S,N} (selector, newnames)
2936 end
3037end
3138
39+ Rename (fun) = Rename (AllSelector (), fun)
40+
3241Rename (pairs:: Pair{C,Symbol} ...) where {C<: Column } = Rename (selector (first .(pairs)), collect (last .(pairs)))
3342
3443Rename (pairs:: Pair{C,S} ...) where {C<: Column ,S<: AbstractString } =
@@ -41,13 +50,17 @@ Rename(pairs::AbstractVector{Pair{C,S}}) where {C<:Column,S<:AbstractString} =
4150
4251isrevertible (:: Type{<:Rename} ) = true
4352
53+ _newnames (newnames:: AbstractVector{Symbol} , snames) = newnames
54+ _newnames (fun, snames) = [Symbol (fun (string (name))) for name in snames]
55+
4456function applyfeat (transform:: Rename , feat, prep)
4557 cols = Tables. columns (feat)
4658 names = Tables. columnnames (cols)
4759 snames = transform. selector (names)
48- _assert (transform. newnames ⊈ setdiff (names, snames), " duplicate names" )
60+ tnames = _newnames (transform. newnames, snames)
61+ _assert (tnames ⊈ setdiff (names, snames), " duplicate names" )
4962
50- mapnames = Dict (zip (snames, transform . newnames ))
63+ mapnames = Dict (zip (snames, tnames ))
5164 newnames = [get (mapnames, nm, nm) for nm in names]
5265 columns = [Tables. getcolumn (cols, nm) for nm in names]
5366
0 commit comments