to_long | R Documentation |
to_long
increases number of rows in the dataset and reduce number of
columns. to_wide
makes invert transformation. You can use cols for
selecting variables in the arguments. See examples.
to_long(
data,
columns = NULL,
keep = NULL,
names_in = "variable",
values_in = "value",
drop_na = FALSE,
names_factor = TRUE,
value_factor = FALSE,
...
)
to_wide(
data,
keep = NULL,
names_in = variable,
values_in = value,
fun = identity,
sep = "_",
fill = NA,
missing_comb = c("none", "rows", "columns", "all"),
...
)
data |
A data.frame to convert |
columns |
unquoted names of variables for stacking. When missing, we
will stack all columns outside |
keep |
unquoted names of columns which will be kept as is, e. g. only
recycled or deduplicated. If missing, it is all columns except stacked or
unstacked. If |
names_in |
name of the stacked variable names column. The default name
is 'variable'. It is quoted in the |
values_in |
name(-s) of the stacked data values column(s). The default
name is 'value'. Multiple names can be provided here for the case when
|
drop_na |
If TRUE, NA values will be removed from the stacked data. |
names_factor |
If TRUE, the column with names will be converted to factor, else it will be a character column. TRUE by default. |
value_factor |
If TRUE, the value column will be converted to factor, else the stacked values type is left unchanged. FALSE by default. |
... |
other arguments passed to |
fun |
Should the data be aggregated before casting? By default, it is
|
sep |
Character vector of length 1, indicating the separating character in variable names generated during casting. Default is "_". |
fill |
Value with which to fill missing cells. |
missing_comb |
One of "none" (the default), "rows" - include missing combinations in rows, "columns" - include missing combinations in columns, and "all" include all missing combinations. |
data.table in the wide or long form.
data(iris)
# 'to_long'
long_iris = iris %>%
to_long(keep = Species)
long_iris
iris_with_stat = long_iris %>%
take(mean = mean(value),
sd = sd(value),
n = .N*1.0,
by = .(Species, variable)
) %>%
to_long(columns = c(mean, sd, n), names_in = "stat")
# 'to_wide' - table with multiple stats
iris_with_stat %>%
to_wide()
iris_with_stat %>%
to_wide(names_in = c(variable, stat))
iris_with_stat %>%
to_wide(names_in = c(variable, Species))
# 'to_wide' - aggregation function
long_iris %>%
to_wide(fun = list(Mean = mean, SD = sd, N = length))
# multiple variables
iris %>%
to_long(list(Sepal = cols("^Sepal"), Petal = cols("^Petal"))) %>%
let(
variable = factor(variable, levels = 1:2, labels = c("Length", "Width"))
) %>%
to_wide(values_in = c(Sepal, Petal))
# '%to%' selector - example from tidyr::pivot_longer
data(anscombe)
anscombe %>%
to_long(
list(x = x1 %to% x4, y = y1 %to% y4),
names_in = "set"
)
######################################
## Examples from data.table melt/dcast
######################################
set.seed(45)
DT = data.table(
i_1 = c(1:5, NA)*1.0,
i_2 = c(NA,6,7,8,9,10)*1.0,
f_1 = factor(sample(c(letters[1:3], NA), 6, TRUE)),
f_2 = factor(c("z", "a", "x", "c", "x", "x"), ordered=TRUE),
c_1 = sample(c(letters[1:3], NA), 6, TRUE),
d_1 = as.Date(c(1:3,NA,4:5), origin="2013-09-01"),
d_2 = as.Date(6:1, origin="2012-01-01")
)
# id, values as character/integer/numeric vectors
to_long(DT, f_1, keep = 1:2)
to_long(DT, f_1, keep = c(i_1, i_2))
to_long(DT, f_1, keep = i_1 %to% i_2)
to_long(DT, f_1, keep = cols(i_1:i_2), names_factor = FALSE)
to_long(DT, f_1, keep = cols("i_{1:2}"))
to_long(DT, f_1, keep = cols("^i_"))
to_long(DT, f_1, keep = cols("^i_"), names_in = "var", values_in = "val")
col_var = "^i_"
to_long(DT, 3, keep = cols(col_var))
to_long(DT, cols("^f_"), keep = cols("^i_"), value_factor = TRUE)
to_long(mtcars)
to_long(mtcars, keep = am)
to_long(mtcars, columns = c(am, vs, mpg))
to_long(mtcars, columns = c(am, vs, mpg), keep = FALSE)
to_long(DT, keep = f_1, columns = c(i_1, i_2), drop_na = TRUE)
to_long(DT, keep=1:2, columns = list(cols("^f_"), cols("^d_")), value_factor=TRUE)
data("ChickWeight")
names(ChickWeight) = tolower(names(ChickWeight))
DT = to_long(ChickWeight, keep=2:4)
to_wide(DT, keep = time, fun = mean)
to_wide(DT, keep = FALSE, fun = mean)
to_wide(DT, keep = diet, fun = mean)
to_wide(DT, keep = c(diet, chick), names_in = time, missing_comb = "all")
to_wide(DT, keep = c(diet, chick), names_in = time, missing_comb = "all", fill = 0)
to_wide(DT, chick, time, fun = mean)
# using FALSE
DT = data.table(v1 = rep(1:2, each = 6),
v2 = rep(rep(1:3, 2), each = 2),
v3 = rep(1:2, 6),
v4 = rnorm(6))
## for each combination of (v1, v2), add up all values of v4
to_wide(DT,
cols("^v(1|2)"),
names_in = FALSE,
values_in = v4,
fun = sum
)
# multiple values_in and multiple fun
DT = data.table(x=sample(5,20,TRUE),
y=sample(2,20,TRUE),
z=sample(letters[1:2], 20,TRUE),
d1 = runif(20),
d2=1L)
# multiple values_in
to_wide(DT,
keep = c(x, y),
names_in = z,
values_in = c(d1, d2),
fun = sum,
fill = 0)
# multiple funs
to_wide(DT,
keep = c(x, y),
names_in = z,
values_in = d1,
fun = list(sum = sum, mean = mean),
fill = NULL)
# multiple fun and values_in (all combinations)
to_wide(DT,
keep = c(x, y),
names_in = z,
values_in = c(d1, d2),
fun = list(sum = sum, mean = mean)
)
# multiple fun and values_in (one-to-one)
to_wide(DT,
keep = c(x, y),
names_in = z,
values_in = list(d1, d2),
fun = list(sum = sum, mean = mean)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.