Fill missing kwarg in vcat function when cols = :union

I am submitting to you a question which I believe to be of a general nature (along with other issues arising from the case), derived from a particular case on which I was working.
I find myself in the need to make transformations (via reshapein (...)) of the various subdataframes obtained from groupby (df, ...) and then combine them together with the use of vcat.
Since applying the reshapein (...) function to the various subgroups generates dataframes with a different set of columns, I cannot use combine (groupby (...), ...), although an option would be useful in these cases like that of vcat cols =: union.
Therefore I regret merging with vcat (..., cols =: union). I wonder if it wasn’t useful in cases like these where I know well the origin of the various missing items, if it wasn’t useful to have a fillmissing = something argument.
In the absence of this I have defined and used the two functions filldown () and fillup () which replace the missing value with the last useful value available forward or backward.

Also with regard to functions of this type I believe that they are quite of general necessity and it would not be bad if they were available (not in naive form, like the one made by me) in the dataframes.jl package

filldown(v)=accumulate((x,y)->coalesce(y,x), v,init=v[1])

fillup(v)=reverse(filldown(reverse(v)))

function reshape(grp)
    sgrps=groupby(df[grp,:],:Page)
    rr=mapreduce(reshapein,(x,y)-> vcat(x,y, cols = :union), sgrps)
    transform!(rr,Cols(:).=> filldown∘fillup,renamecols=false)
end

If I understand you correctly, filldown and fillup are “last observation carried forward” and “next observation carried backward” in Impute.jl

https://invenia.github.io/Impute.jl/stable/api/imputation/#Last-Observation-Carried-Forward-(LOCF)

What do you think about the idea of having a kwarg in cases like this in vcat(....; cols= :union, fill = ...) ?

I would personally be opposed to it, as it would complicate the DataFrames API (which is already quite large) and reimplement functionality that is better placed in a dedicated package (Impute.jl offers loads more than just those two options), leveraging Julia’s modularity.

That said I’m not a maintainer, so feel free to open a PR with a feature request.