This package exports two macros:
@cols
to make it easier to construct pairs of the formsource => function => target
.@rows
to make it easier to construct pairs of the formsource => ByRow(function) => target
.
These macros can be used within DataFrames.jl transform
, select
, subset
, etc. It is a minimal alternative to DataFramesMeta.jl.
using PairsMacros
@cols z = sum(x)
#> [:x] => sum => :z
@rows z = x + y
#> [:x, :y] => ByRow(+) => :z
Use $
to substitute the name of certain columns by symbols
u = :y
@cols z = sum($u)
#> [:y] => sum => :z
@cols $u = sum(x)
#> [:x] => sum => :y
u = "my variable name"
@cols z = sum($u)
"my variable name" => sum => :z
Use esc
to denote variables that do not refer to columns
u = [0.25, 0.75]
@cols z = quantile(y, esc(u))
#> [:y] => (x -> quantile(x, u)) => :z
@cols z = map(esc(cos), y)
#> [:y] => (x -> map(cos, x)) => :z
@rows z = tryparse(esc(Float64), y)
#> [:y] => ByRow(x -> tryparse(Float64, x)) => :z
Use PairsMacros
in conjunction with DataFrames
using DataFrames, Chain, Statistics, PairsMacros
df = DataFrame(a = repeat(1:5, outer = 20),
b = repeat(["a", "b", "c", "d"], inner = 25),
x = repeat(1:20, inner = 5))
transform(@rows y = 10 * x)
Use Chain
for a sequence of transformations:
x_thread = @chain df begin
transform(@rows y = 10 * x)
subset(@rows a > 2)
groupby(:b)
combine(@cols meanX = mean(x) meanY = mean(y))
sort(:meanX)
select(@cols meanX meanY var = b)
end
All symbols are assumed to refer to columns, with the exception of:
- symbol
missing
- first
args
of a:call
or:.
expression (e.g. function calls) - arguments inside of a splicing/interpolation expression
$()
- arguments inside
esc()