Ensure that column names in output retain original variable names, instead of using arbitrary X1, X2, etc
The most efficient way that I can think of is creating a function with rmvt which takes an additional argument to decide whether column names should be assigned based on the input (i.e. sigma) or not. If TRUE, before returning the results of rmvt function, it assigns the original names. See below (I used airquality dataset to make a reproducible example);

library(mvtnorm)
library(dplyr)

dat &lt;- na.omit(datasets::airquality)[1:2,1:2]

muvec = apply(dat, 2, mean) #data is passed as R dataframe
sigma = cov(dat)
df = 10
n = 2

rmvt.names &lt;- function(n, sigma = diag(2), df = 1, delta = rep(0, nrow(sigma)),
                       type = c("shifted", "Kshirsagar"), names = FALSE){
  out &lt;- rmvt(n, sigma, df, delta, type)
  if (names) { colnames(out) &lt;- colnames(sigma) }
  return(out)
}

lapply(1:n, function(x) 
            rep(muvec, each=10) + rmvt.names(10, sigma=sigma, df=df, names = T)) %&gt;%
  as.data.frame() %&gt;% 
  select (sort(names(.)))

#&gt;       Ozone  Ozone.1    Solar.R  Solar.R.1
#&gt; 1  37.47822 45.06226 139.286427 248.496571
#&gt; 2  40.59224 42.78024 184.128243 215.635423
#&gt; 3  33.03107 35.89953  75.247397 116.553211
#&gt; 4  28.07207 28.48342   3.837864   9.761237
#&gt; 5  38.15097 39.46869 148.974039 167.949166
#&gt; 6  44.04143 42.68460 233.796536 214.258203
#&gt; 7  36.54224 40.53313 125.808217 183.277053
#&gt; 8  37.37606 38.77892 137.815314 158.016502
#&gt; 9  43.99939 37.11836 233.191196 134.104332
#&gt; 10 37.63792 32.28113 141.586044  64.448253


Created on 2020-05-06 by the reprex package (v0.3.0)