## --- Basic usage --------------------------------------------------
df <- data.frame(id = 1:5,
category = factor(letters[1:5]),
v1 = rnorm(5), v2 = rnorm(5))
# Automatic ID inference: `id` and `category` are non-numeric
melt(df)
# Explicit ID columns
melt(df, id.vars = c("id", "category"))
# Explicit measure columns
melt(df, measure.vars = c("v1", "v2"))
## --- Custom column names and na.rm --------------------------------
df2 <- data.frame(id = 1:3, x = c(1, NA, 3), y = c(4, 5, NA))
melt(df2, id.vars = "id",
variable.name = "var", value.name = "val",
na.rm = TRUE)
## --- Two memory layouts ------------------------------------------
# major = NULL (default): column-major (reshape2-compatible)
# major = "col" : column-major, reshape2-compatible
# major = "row" : row-major, tidyr-compatible
df_wide <- data.frame(id = 1:100,
matrix(rnorm(100 * 50), ncol = 50))
res_default <- melt(df_wide, id.vars = "id")
res_col <- melt(df_wide, id.vars = "id", major = "col")
res_row <- melt(df_wide, id.vars = "id", major = "row")
# The two layouts produce the same content in a different order
identical(sort(res_col$value), sort(res_row$value))
## --- as.factor controls the variable column type ------------------
# Default: factor for "col", character for "row"
is.factor(res_col$variable) # TRUE
is.character(res_row$variable) # TRUE
# Explicit override
res_row_fac <- melt(df_wide, id.vars = "id", major = "row",
as.factor = TRUE)
is.factor(res_row_fac$variable) # TRUE
Run the code above in your browser using DataLab