Here are versions of with and transform! for DataFrame's. They each operate on columns.
function with(df::DataFrame, ex::Expr)
# by-column with operation on df
# helper function to replace symbols in ex with a reference to the
# appropriate column in df
replace_symbols(x, syms::Dict) = x
replace_symbols(e::Expr, syms::Dict) = Expr(e.head, isempty(e.args) ? e.args : map(x -> replace_symbols(x, syms), e.args), e.typ)