Excellent demonstration!
A suggestion here, to simplify (avoid the second derive) and generalize keys spreading after a fold.
What about something like:
// ex: 'new_sp_m2534'.match(/new_([a-z]{2})_(m|f)(\d+)/)
.spread({key: d => op.jsmatch(d.key, /new_([a-z]{2})_(m|f)(\d+)/) }, { as: ['new', 'type', 'sex', 'age'] })
i know there is an op.match in Arquero, but it does not look equivalent to the js match function