По производительности кажется, что на больших примерах reshape2::melt
- самый быстрый, но, если честно, мы говорим о миллисекундах.
Пример с большими числами:
# bigger numbers example
v <- 1:100
names(v) <- paste0("col_", 1:100)
d <- purrr::map_df(v, function(x) runif(100000, 0, 1))
d$id <- 1:100000
dt <- as.data.table(d) # for dt
Микробенчмарк:
microbenchmark::microbenchmark(
gather = {gather(d, "key", "value", -id)},
melt = {melt(d, id.vars=c("id"))},
dt = {melt(dt, id.vars=c("id"))},
times = 100
)
# Unit: milliseconds
# expr min lq mean median uq max neval
# gather 50.75434 51.61489 64.90385 61.06314 68.10268 201.7082 100
# melt 12.08457 12.58755 19.77046 13.13005 22.29556 162.0733 100
# dt 42.80573 44.50143 50.62359 45.04182 54.15235 187.1778 100