If you have a list-column, this makes each element of the list its own
row. unnest()
can handle list-columns that contain atomic vectors, lists, or
data frames (but not a mixture of the different types).
unnest(data, ..., .drop = NA, .id = NULL, .sep = NULL,
.preserve = NULL)
A data frame.
Specification of columns to unnest. Use bare variable names or functions of variables. If omitted, defaults to all list-cols.
Should additional list columns be dropped? By default,
unnest
will drop them if unnesting the specified columns requires
the rows to be duplicated.
Data frame identifier - if supplied, will create a new column
with name .id
, giving a unique identifier. This is most useful if
the list column is named.
If non-NULL
, the names of unnested data frame columns
will combine the name of the original list-col with the names from
nested data frame, separated by .sep
.
Optionally, list-columns to preserve in the output. These
will be duplicated in the same way as atomic vectors. This has
dplyr::select semantics so you can preserve multiple variables with
.preserve = c(x, y)
or .preserve = starts_with("list")
.
If you unnest multiple columns, parallel entries must have the same length or number of rows (if a data frame).
nest()
for the inverse operation.
# NOT RUN {
library(dplyr)
df <- tibble(
x = 1:3,
y = c("a", "d,e,f", "g,h")
)
df %>%
transform(y = strsplit(y, ",")) %>%
unnest(y)
# Or just
df %>%
unnest(y = strsplit(y, ","))
# It also works if you have a column that contains other data frames!
df <- tibble(
x = 1:2,
y = list(
tibble(z = 1),
tibble(z = 3:4)
)
)
df %>% unnest(y)
# You can also unnest multiple columns simultaneously
df <- tibble(
a = list(c("a", "b"), "c"),
b = list(1:2, 3),
c = c(11, 22)
)
df %>% unnest(a, b)
# If you omit the column names, it'll unnest all list-cols
df %>% unnest()
# You can also choose to preserve one or more list-cols
df %>% unnest(a, .preserve = b)
# Nest and unnest are inverses
df <- data.frame(x = c(1, 1, 2), y = 3:1)
df %>% nest(y)
df %>% nest(y) %>% unnest()
# If you have a named list-column, you may want to supply .id
df <- tibble(
x = 1:2,
y = list(a = 1, b = 3:4)
)
unnest(df, .id = "name")
# }
Run the code above in your browser using DataLab