Well, not that there is anything "wrong" with previous suggestions, but it is pretty straightforward just with base R functionality:
> nm <- names(tab)[2:4] > with(tab, data.frame(date = rep(date, length(nm)), + direction = rep(nm, e = 3), + percentage = do.call(c, tab[, nm])) + ) date direction percentage down1 2019M08 down 0.01709827 down2 2019M09 down 0.02094724 down3 2019M10 down 0.01750911 uc1 2019M08 uc 0.26538820 uc2 2019M09 uc 0.22657970 uc3 2019M10 uc 0.24500300 up1 2019M08 up 0.71751360 up2 2019M09 up 0.75247310 up3 2019M10 up 0.73748790 Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Aug 17, 2020 at 9:53 AM Rasmus Liland <j...@posteo.no> wrote: > Dear John, > > Op ma 17 aug. 2020 om 09:52 schreef Eric Berger: > | On Mon, Aug 17, 2020 at 10:49 AM Thierry Onkelinx wrote: > | | > | | You are looking for tidyr::pivot_longer() > | > | Alternatively, melt() from the reshape2 package. > | > | library(reshape2) > | melt(x,id.vars="date",measure.vars=c("down","uc","up"),variable.name > | ="direction",value.name="percentage") > > Also, stack is also possible to use: > > tab <- structure(list( > date = c("2019M08", "2019M09", "2019M10"), > down = c(0.01709827, 0.02094724, 0.01750911), > uc = c(0.2653882, 0.2265797, 0.245003), > up = c(0.7175136, 0.7524731, 0.7374879)), > class = "data.frame", row.names = c(NA, -3L)) > > out <- utils::stack(x=tab, select=-date) > colnames(out) <- c("percentage", "direction") > out$date <- tab$date > out <- out[,sort(colnames(out))] > > out > > yields > > date direction percentage > 1 2019M08 down 0.01709827 > 2 2019M09 down 0.02094724 > 3 2019M10 down 0.01750911 > 4 2019M08 uc 0.26538820 > 5 2019M09 uc 0.22657970 > 6 2019M10 uc 0.24500300 > 7 2019M08 up 0.71751360 > 8 2019M09 up 0.75247310 > 9 2019M10 up 0.73748790 > > On 2020-08-17 07:46 -0500, Hadley Wickham wrote: > | On Mon, Aug 17, 2020 at 11:23 AM Thierry Onkelinx wrote: > | | > | | reshape2 is a retired package. The > | | author recommends to use his new > | | package tidyr. > | > | We previously used the term retired to > | suggest that the package is taking it > | easy and relaxing, but isn't dead. > > Haha :) > > | This causes a lot of confusion so we > | now call this state "superseded" — > | we'll continue to keep reshape2 (and > | reshape!) on CRAN > > Good! > > | but they won't receive any new > | features, and we believe that there > | are now better approaches to solving > | the same problem. > > Is tidyr::pivot_longer this better > solution? It is an easier to understand > version of the now retired and confusing > (for me) tidyr::gather which at least > reigned back in 2018 (was that any good > compared to reshape?). > > Best, > Rasmus > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.