vitrofusion vidrio temperatura soplete que puede para moldea microondas fundir funde formas derretir con como casa botellas aplanar ablanda r reshape dplyr melt

vidrio - ¿Cómo fundir y moldear marcos de datos usando dplyr?



formas de fundir vidrio (3)

Además, el elenco puede estar usando tidyr::spread()

Ejemplo para ti

library(reshape2) library(tidyr) library(dplyr) # example data : `mini_iris` (mini_iris <- iris[c(1, 51, 101), ]) # melt (melted1 <- mini_iris %>% melt(id.vars = "Species")) # on reshape2 (melted2 <- mini_iris %>% gather(variable, value, -Species)) # on tidyr # cast melted1 %>% dcast(Species ~ variable, value.var = "value") # on reshape2 melted2 %>% spread(variable, value) # on tidyr

Recientemente estoy haciendo todas mis manipulaciones de datos usando dplyr y es una excelente herramienta para eso. Sin embargo, no puedo fundir o lanzar un marco de datos usando dplyr. ¿Hay alguna forma de hacer eso? En este momento estoy usando reshape2 para este propósito.

Quiero la solución ''dplyr'' para:

require(reshape2) data(iris) dat <- melt(iris,id.vars="Species")


El sucesor de reshape2 es tidyr . El equivalente de melt() y dcast() son gather() y spread() respectivamente. El equivalente a tu código sería entonces

library(tidyr) data(iris) dat <- gather(iris, variable, value, -Species)

Si tiene magrittr importado, puede usar el operador de tubería como en dplyr , es decir, escribir

dat <- iris %>% gather(variable, value, -Species)

Tenga en cuenta que debe especificar los nombres de variables y valores explícitamente, a diferencia de melt() . Encuentro la sintaxis de gather() bastante conveniente, porque puedes simplemente especificar las columnas que deseas convertir a formato largo, o especificar las que quieres que permanezcan en el nuevo marco de datos prefijando con ''-'' (al igual que para Species arriba), que es un poco más rápido para escribir que en melt() . Sin embargo, he notado que al menos en mi máquina, tidyr puede ser notablemente más lento que reshape2 .

Editar En respuesta al comentario de @hadley a continuación, estoy publicando información de tiempo comparando las dos funciones en mi PC.

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


Para agregar a las respuestas anteriores usando el ejemplo mini_iris de @ Lovetoken (esto es demasiado complejo para un comentario) - para aquellos recién llegados que no entienden lo que se entiende por derretimiento y fundición.

library(reshape2) library(tidyr) library(dplyr) # example data : `mini_iris` mini_iris <- iris[c(1, 51, 101), ] # mini_iris #Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 3.5 1.4 0.2 setosa #51 7.0 3.2 4.7 1.4 versicolor #101 6.3 3.3 6.0 2.5 virginica

Melt está tomando el marco de datos y expandiéndolo en una larga lista de valores. No es eficiente, pero puede ser útil si necesita combinar conjuntos de datos. Piensa en la estructura de un cubo de hielo que se derrite sobre una mesa y se extiende.

melted1 <- testiris %>% melt(id.vars = "Species") > nrow(melted1) [1] 12 head(melted1) # Species variable value # 1 setosa Sepal.Length 5.1 # 2 versicolor Sepal.Length 7.0 # 3 virginica Sepal.Length 6.3 # 4 setosa Sepal.Width 3.5 # 5 versicolor Sepal.Width 3.2 # 6 virginica Sepal.Width 3.3

Puede ver cómo los datos se han dividido en muchas filas de valor. Los nombres de columna ahora son texto dentro de una columna variable.

el casting se reensamblará en un data.table o data.frame.