6
6
Rename(:col₁ => :newcol₁, :col₂ => :newcol₂, ..., :colₙ => :newcolₙ)
7
7
Rename([:col₁ => :newcol₁, :col₂ => :newcol₂, ..., :colₙ => :newcolₙ])
8
8
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.
11
15
12
16
# Examples
13
17
@@ -18,17 +22,22 @@ Rename("a" => "x", "c" => "y")
18
22
Rename([1 => "x", 3 => "y"])
19
23
Rename([:a => "x", :c => "y"])
20
24
Rename(["a", "c"] .=> [:x, :y])
25
+ Rename(nm -> nm * "_suffix")
21
26
```
22
27
"""
23
- struct Rename{S<: ColumnSelector } <: StatelessFeatureTransform
28
+ struct Rename{S<: ColumnSelector ,N } <: StatelessFeatureTransform
24
29
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)
29
36
end
30
37
end
31
38
39
+ Rename (fun) = Rename (AllSelector (), fun)
40
+
32
41
Rename (pairs:: Pair{C,Symbol} ...) where {C<: Column } = Rename (selector (first .(pairs)), collect (last .(pairs)))
33
42
34
43
Rename (pairs:: Pair{C,S} ...) where {C<: Column ,S<: AbstractString } =
@@ -41,13 +50,17 @@ Rename(pairs::AbstractVector{Pair{C,S}}) where {C<:Column,S<:AbstractString} =
41
50
42
51
isrevertible (:: Type{<:Rename} ) = true
43
52
53
+ _newnames (newnames:: AbstractVector{Symbol} , snames) = newnames
54
+ _newnames (fun, snames) = [Symbol (fun (string (name))) for name in snames]
55
+
44
56
function applyfeat (transform:: Rename , feat, prep)
45
57
cols = Tables. columns (feat)
46
58
names = Tables. columnnames (cols)
47
59
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" )
49
62
50
- mapnames = Dict (zip (snames, transform . newnames ))
63
+ mapnames = Dict (zip (snames, tnames ))
51
64
newnames = [get (mapnames, nm, nm) for nm in names]
52
65
columns = [Tables. getcolumn (cols, nm) for nm in names]
53
66
0 commit comments