for very large tables (>10^5 col) with the use of the collect function.
using DataStructures
mid(nn)=isodd(nn) ? div(10-nn,2)+1 : div(10-nn,2):div(10-nn,2)+1
function safemed(r)
nn=count(e->isequal(e,NaN),r)
nn==length(r)&&return NaN
middle(nsmallest(div(10-nn,2)+1,r)[mid(nn)]...)
end
select(df, AsTable(:) => ByRow(safemed∘collect) => "median")
Otherwise
ERROR: ArgumentError: input table too wide (100000 columns) to convert to `NamedTuple` of `AbstractVector`s
Stacktrace: