Następca reshape2
jest tidyr
. Odpowiednikami melt()
i dcast()
są odpowiednio: gather()
i . Odpowiednikiem kodzie byłaby wtedy
library(tidyr)
data(iris)
dat <- gather(iris, variable, value, -Species)
Jeśli masz magrittr
importowane można użyć operatora rury jak w dplyr
, czyli napisać
dat <- iris %>% gather(variable, value, -Species)
Zauważ, że musisz określić nazwy zmiennych i wartości wyraźnie, w przeciwieństwie do melt()
. Uważam, że składnia jest całkiem wygodna, ponieważ można po prostu określić kolumny, które mają być konwertowane na długi format, lub określić te, które mają pozostać w nowej ramce danych, poprzedzając je "-" (podobnie jak w przypadku gatunków). powyżej), który jest nieco szybszy do wpisania niż w melt()
. Zauważyłem jednak, że przynajmniej na moim komputerze tidyr
może być zauważalnie wolniejszy niż reshape2
.
Edytuj W odpowiedzi na komentarz @hadley poniżej, zamieszczam informacje o czasie, porównując dwie funkcje na moim komputerze.
library(microbenchmark)
microbenchmark(
melt = melt(iris,id.vars="Species"),
gather = gather(iris, variable, value, -Species)
)
# Unit: microseconds
# expr min lq median uq max neval
# melt 278.829 290.7420 295.797 320.5730 389.626 100
# gather 536.974 552.2515 567.395 683.2515 1488.229 100
set.seed(1)
iris1 <- iris[sample(1:nrow(iris), 1e6, replace = T), ]
system.time(melt(iris1,id.vars="Species"))
# user system elapsed
# 0.012 0.024 0.036
system.time(gather(iris1, variable, value, -Species))
# user system elapsed
# 0.364 0.024 0.387
sessionInfo()
# R version 3.1.1 (2014-07-10)
# Platform: x86_64-pc-linux-gnu (64-bit)
#
# locale:
# [1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
# [3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
# [5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
# [7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
# [9] LC_ADDRESS=C LC_TELEPHONE=C
# [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
# attached base packages:
# [1] stats graphics grDevices utils datasets methods base
#
# other attached packages:
# [1] reshape2_1.4 microbenchmark_1.3-0 magrittr_1.0.1
# [4] tidyr_0.1
#
# loaded via a namespace (and not attached):
# [1] assertthat_0.1 dplyr_0.2 parallel_3.1.1 plyr_1.8.1 Rcpp_0.11.2
# [6] stringr_0.6.2 tools_3.1.1
Następcą "reshape2" jest 'tidyr'. Odpowiednikiem 'melt' i' dcast' są odpowiednio 'gather' i' Spread'. Nie jest jeszcze dostępny na CRAN, ale możesz go pobrać z github (https://github.com/hadley/tidyr)! – konvas
@konvas Aktualizacja: 'tidyr' jest teraz na CRAN (http://cran.r-project.org/web/packages/tidyr/index.html) – dickoa
@konvas dlaczego nie uważasz go za właściwą odpowiedź? – Beasterfield