I need to transpose a dataframe without using t()
as I want to avoid transforming it into a matrix. So, I'm using the solution from here:
mydata <- data.table(col0=c("row1","row2","row3"),
col1=c(11,21,31),
col2=c(12,22,32),
col3=c(13,23,33))
mydata
# col0 col1 col2 col3
# row1 11 12 13
# row2 21 22 23
# row3 31 32 33
dcast(melt(mydata, id.vars = "col0"), variable ~ col0)
# variable row1 row2 row3
# 1: col1 11 21 31
# 2: col2 12 22 32
# 3: col3 13 23 33
And I use the same logic with the data I'm using:
x <- merge(as.data.frame(table(mtcars$mpg)), as.data.frame(round(prop.table(table(mtcars$mpg)),2)), by="Var1", all.x=TRUE)
data.table::dcast(data.table::melt(x, id.vars = "Var1"), variable ~ Var1)
It works! But it gives me a warning and a "future error":
Warning message in data.table::melt(x, id.vars = "Var1"): “The melt generic in data.table has been passed a data.frame and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(x). In the next version, this warning will become an error.” Warning message in data.table::dcast(data.table::melt(x, id.vars = "Var1"), variable ~ : “The dcast generic in data.table has been passed a data.frame and will attempt to redirect to the reshape2::dcast; please note that reshape2 is deprecated, and this redirection is now deprecated as well. Please do this redirection yourself like reshape2::dcast(data.table::melt(x, id.vars = "Var1")). In the next version, this warning will become an error.”
Also, I have been trying to transpose the dataframe using a solution from here using dplyr::spread()
but it seems to be far more complicated than the solution from data.table
package (when the value columns are more than 1, as in this case). I'm more used to dplyr()
and tidyverse()
but data.table
solution is far simpler to just ignore it.
Additional Information.
> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)
Matrix products: default
BLAS/LAPACK: /usr/lib/libopenblasp-r0.2.19.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] GGally_1.4.0 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.3
[5] purrr_0.3.2 readr_1.3.1 tidyr_1.0.0 tibble_2.1.3
[9] ggplot2_3.2.1.9000 tidyverse_1.2.1 bigrquery_1.2.0 httr_1.4.1
loaded via a namespace (and not attached):
[1] bit64_0.9-7 jsonlite_1.6 splines_3.6.0
[4] modelr_0.1.4 Formula_1.2-3 assertthat_0.2.1
[7] getPass_0.2-2 latticeExtra_0.6-28 cellranger_1.1.0
[10] pillar_1.4.2 backports_1.1.5 lattice_0.20-38
[13] glue_1.3.1 uuid_0.1-2 digest_0.6.21
[16] checkmate_1.9.4 RColorBrewer_1.1-2 rvest_0.3.4
[19] colorspace_1.4-1 htmltools_0.4.0 Matrix_1.2-17
[22] plyr_1.8.4 psych_1.8.12 pkgconfig_2.0.3
[25] broom_0.5.2 haven_2.1.1 scales_1.0.0
[28] htmlTable_1.13.2 generics_0.0.2 withr_2.1.2
[31] repr_1.0.1.9000 skimr_1.0.7 nnet_7.3-12
[34] cli_1.1.0 mnormt_1.5-5 survival_2.44-1.1
[37] magrittr_1.5 crayon_1.3.4 readxl_1.3.1
[40] evaluate_0.14 fs_1.3.1 nlme_3.1-141
[43] xml2_1.2.2 foreign_0.8-72 data.table_1.12.4
[46] tools_3.6.0 hms_0.5.1 gargle_0.4.0
[49] lifecycle_0.1.0 munsell_0.5.0 cluster_2.1.0
[52] compiler_3.6.0 rlang_0.4.0 grid_3.6.0
[55] pbdZMQ_0.3-3 IRkernel_1.0.2.9000 rstudioapi_0.10
[58] htmlwidgets_1.5.1 base64enc_0.1-3 gtable_0.3.0
[61] DBI_1.0.0 reshape_0.8.8 reshape2_1.4.3
[64] R6_2.4.0 gridExtra_2.3 lubridate_1.7.4
[67] knitr_1.25 bit_1.1-14 zeallot_0.1.0
[70] Hmisc_4.2-0 stringi_1.4.3 parallel_3.6.0
[73] IRdisplay_0.7.0.9000 Rcpp_1.0.2 vctrs_0.2.0
[76] rpart_4.1-15 acepack_1.4.1 xfun_0.10
[79] tidyselect_0.2.5