@@ -44,8 +44,7 @@ isrevertible(::Type{<:Sample}) = true
44
44
45
45
function preprocess (transform:: Sample , feat)
46
46
# retrieve valid indices
47
- rows = Tables. rowtable (feat)
48
- inds = 1 : length (rows)
47
+ inds = 1 : _nrows (feat)
49
48
50
49
size = transform. size
51
50
weights = transform. weights
@@ -65,36 +64,38 @@ function preprocess(transform::Sample, feat)
65
64
end
66
65
67
66
function applyfeat (:: Sample , feat, prep)
68
- # collect all rows
69
- rows = Tables. rowtable (feat)
70
-
71
67
# preprocessed indices
72
68
sinds, rinds = prep
73
69
74
- # select rows
75
- srows = view (rows , sinds)
76
- rrows = view (rows , rinds)
70
+ # selected and removed rows
71
+ srows = Tables . subset (feat , sinds)
72
+ rrows = Tables . subset (feat , rinds)
77
73
78
74
newfeat = srows |> Tables. materializer (feat)
79
-
80
75
newfeat, (sinds, rinds, rrows)
81
76
end
82
77
83
78
function revertfeat (:: Sample , newfeat, fcache)
84
- # collect all rows
85
- rows = Tables. rowtable (newfeat)
86
-
79
+ cols = Tables. columns (newfeat)
80
+ names = Tables. columnnames (cols)
87
81
sinds, rinds, rrows = fcache
88
82
89
- uinds = sort (unique (sinds))
90
- urows = map (uinds) do i
91
- j = findfirst (== (i), sinds)
92
- rows[j]
83
+ # columns with selected rows in original order
84
+ uinds = indexin (sort (unique (sinds)), sinds)
85
+ columns = map (names) do name
86
+ y = Tables. getcolumn (cols, name)
87
+ [y[i] for i in uinds]
93
88
end
94
89
95
- for (i, row) in zip (rinds, rrows)
96
- insert! (urows, i, row)
90
+ # insert removed rows into columns
91
+ rrcols = Tables. columns (rrows)
92
+ for (name, x) in zip (names, columns)
93
+ r = Tables. getcolumn (rrcols, name)
94
+ for (i, v) in zip (rinds, r)
95
+ insert! (x, i, v)
96
+ end
97
97
end
98
98
99
- urows |> Tables. materializer (newfeat)
99
+ 𝒯 = (; zip (names, columns)... )
100
+ 𝒯 |> Tables. materializer (newfeat)
100
101
end
0 commit comments