Skip to content

Commit a342fec

Browse files
committed
Add arguments to @dropna, @replacena and @dissallowna
1 parent 537f7f0 commit a342fec

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/table_query_macros.jl

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,29 @@ macro dissallowna()
197197
return :( Query.@map(map(our_get, _)) )
198198
end
199199

200+
macro dissallowna(columns...)
201+
return :( Query.@mutate( $( ( :( $(columns[i].value) = our_get(_.$(columns[i].value)) ) for i=1:length(columns) )... ) ) )
202+
end
203+
200204
macro dropna()
201205
return :( i-> i |> Query.@filter(!any(isna, _)) |> Query.@dissallowna() )
202206
end
203207

204-
macro replacena(arg)
205-
return :( Query.@map(map(i->our_get(i, $arg), _)) )
208+
macro dropna(columns...)
209+
return :( i-> i |> Query.@filter(!any(($((:(isna(_.$(columns[i].value))) for i in 1:length(columns) )...),))) |> Query.@dissallowna($(columns...)) )
210+
end
211+
212+
macro replacena(arg, args...)
213+
if length(args)==0 && !(arg isa Expr && arg.head==:call && length(arg.args)==3 && arg.args[1]==:(=>))
214+
return :( Query.@map(map(i->our_get(i, $arg), _)) )
215+
else
216+
args = [arg; args...]
217+
218+
all(i isa Expr && i.head==:call && length(i.args)==3 && i.args[1]==:(=>) for i in args) || error("Invalid syntax.")
219+
220+
columns = map(i->i.args[2].value, args)
221+
replacement_values = map(i->i.args[3], args)
222+
223+
return :( Query.@mutate( $( ( :( $(columns[i]) = our_get(_.$(columns[i]), $(replacement_values[i])) ) for i=1:length(columns) )... ) ) )
224+
end
206225
end

test/test_macros.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ end
5757
@test df |> @dropna() |> collect == [(a=1,b=1.), (a=3, b=3.)]
5858
@test df |> @filter(!any(isna, _)) |> @dropna() |> collect == [(a=1,b=1.), (a=3, b=3.)]
5959
@test df |> @select(:b) |> @dropna() |> collect == [(b=1.,),(b=2.,),(b=3.,)]
60+
61+
@test df |> @dropna(:a) |> collect == [(a=1,b=1.), (a=3, b=3.)]
62+
@test df |> @dropna(:b) |> collect == [(a=DataValue(1),b=1.), (a=DataValue{Int}(),b=2.),(a=DataValue(3), b=3.)]
63+
@test df |> @dropna(:a, :b) |> collect == [(a=1,b=1.), (a=3, b=3.)]
6064
end
6165

6266
@testset "@replacena" begin
@@ -66,12 +70,18 @@ end
6670
@test df |> @replacena(2) |> collect == [(a=1,b=1.), (a=2, b=2.), (a=3, b=3.)]
6771
@test df |> @dropna() |> @replacena(2) |> collect == [(a=1,b=1.), (a=3, b=3.)]
6872
@test df |> @select(:b) |> @replacena(2) |> collect == [(b=1.,),(b=2.,),(b=3.,)]
73+
74+
@test df |> @replacena(:a=>2) |> collect == [(a=1,b=1.), (a=2, b=2.), (a=3, b=3.)]
75+
@test df |> @replacena(:b=>2) |> collect == [(a=DataValue(1),b=1.), (a=DataValue{Int}(),b=2.),(a=DataValue(3), b=3.)]
76+
@test df |> @replacena(:a=>2, :b=>8) |> collect == [(a=1,b=1.), (a=2, b=2.), (a=3, b=3.)]
6977
end
7078

7179
@testset "@dissallowna" begin
7280

7381
df = DataFrame(a=[1,missing,3], b=[1.,2.,3.])
7482

7583
@test_throws DataValueException df |> @dissallowna() |> collect
76-
df |> @filter(!any(isna, _)) |> @dissallowna() |> collect == [(a=1,b=1.), (a=3, b=3.)]
84+
@test df |> @filter(!any(isna, _)) |> @dissallowna() |> collect == [(a=1,b=1.), (a=3, b=3.)]
85+
@test_throws DataValueException df |> @dissallowna(:a) |> collect
86+
@test df |> @dissallowna(:b) |> collect == [(a=DataValue(1),b=1.), (a=DataValue{Int}(),b=2.),(a=DataValue(3), b=3.)]
7787
end

0 commit comments

Comments
 (0)