Unnest 将包含 DataFrame 的列表列扩展为行和列。
用法
unnest(
data,
cols,
...,
keep_empty = FALSE,
ptype = NULL,
names_sep = NULL,
names_repair = "check_unique",
.drop = deprecated(),
.id = deprecated(),
.sep = deprecated(),
.preserve = deprecated()
)
参数
- data
-
一个 DataFrame 。
- cols
-
<
tidy-select
> 要取消嵌套的列表列。当选择多列时,同一行的值将被回收到它们的共同大小。
- ...
-
: 以前你可以写
df %>% unnest(x, y, z)
。转换成df %>% unnest(c(x, y, z))
。如果您之前创建了一个新变量unnest()
你现在需要明确地这样做mutate()
。转变df %>% unnest(y = fun(x, y, z))
到df %>% mutate(y = fun(x, y, z)) %>% unnest(y)
. - keep_empty
-
默认情况下,对于要取消切割/取消嵌套的列表中的每个元素,您都会获得一行输出。这意味着如果存在大小为 0 的元素(例如
NULL
或空 DataFrame 或向量),则整行将从输出中删除。如果要保留所有行,请使用keep_empty = TRUE
将 size-0 元素替换为单行缺失值。 - ptype
-
(可选)列 name-prototype 的命名列表对强制
cols
,覆盖通过组合各个值猜测的默认值。或者,可以提供单个空 ptype,它将应用于所有cols
。 - names_sep
-
如果默认为
NULL
,则外部名称将来自内部名称。如果是字符串,则外部名称将通过将外部列名称和内部列名称粘贴在一起形成,并用names_sep
分隔。 - names_repair
-
用于检查输出数据帧是否具有有效名称。必须是以下选项之一:
-
"minimal
“:没有名称修复或检查,超出基本存在, -
"unique
“:确保名称唯一且不为空, -
"check_unique
":(默认),不进行名称修复,但检查它们是否唯一, -
"universal
“:使名称具有唯一性和语法性 -
函数:应用自定义名称修复。
-
tidyr_legacy :使用 tidyr 0.8 中的名称 Repair。
-
公式:purrr-style 匿名函数(参见
rlang::as_function()
)
有关这些术语以及用于执行它们的策略的更多详细信息,请参阅
vctrs::vec_as_names()
。 -
- .drop, .preserve
- .id
-
: 转变
df %>% unnest(x, .id = "id")
到df %>% mutate(id = names(x)) %>% unnest(x))
. - .sep
新语法
tidyr 1.0.0 为 nest()
和 unnest()
引入了新语法,其设计与其他函数更加相似。转换为新语法应该很简单(由您将收到的消息引导),但如果您只需要运行旧分析,则可以使用 nest_legacy()
和 unnest_legacy()
轻松恢复到以前的行为,如下所示:
library(tidyr)
nest <- nest_legacy
unnest <- unnest_legacy
也可以看看
其他矩形:hoist()
、unnest_longer()
、unnest_wider()
例子
# unnest() is designed to work with lists of data frames
df <- tibble(
x = 1:3,
y = list(
NULL,
tibble(a = 1, b = 2),
tibble(a = 1:3, b = 3:1, c = 4)
)
)
# unnest() recycles input rows for each row of the list-column
# and adds a column for each column
df %>% unnest(y)
#> # A tibble: 4 × 4
#> x a b c
#> <int> <dbl> <dbl> <dbl>
#> 1 2 1 2 NA
#> 2 3 1 3 4
#> 3 3 2 2 4
#> 4 3 3 1 4
# input rows with 0 rows in the list-column will usually disappear,
# but you can keep them (generating NAs) with keep_empty = TRUE:
df %>% unnest(y, keep_empty = TRUE)
#> # A tibble: 5 × 4
#> x a b c
#> <int> <dbl> <dbl> <dbl>
#> 1 1 NA NA NA
#> 2 2 1 2 NA
#> 3 3 1 3 4
#> 4 3 2 2 4
#> 5 3 3 1 4
# Multiple columns ----------------------------------------------------------
# You can unnest multiple columns simultaneously
df <- tibble(
x = 1:2,
y = list(
tibble(a = 1, b = 2),
tibble(a = 3:4, b = 5:6)
),
z = list(
tibble(c = 1, d = 2),
tibble(c = 3:4, d = 5:6)
)
)
df %>% unnest(c(y, z))
#> # A tibble: 3 × 5
#> x a b c d
#> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 2 1 2
#> 2 2 3 5 3 5
#> 3 2 4 6 4 6
# Compare with unnesting one column at a time, which generates
# the Cartesian product
df %>%
unnest(y) %>%
unnest(z)
#> # A tibble: 5 × 5
#> x a b c d
#> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 2 1 2
#> 2 2 3 5 3 5
#> 3 2 3 5 4 6
#> 4 2 4 6 3 5
#> 5 2 4 6 4 6
相关用法
- R tidyr unnest_longer 将列表列取消嵌套到行中
- R tidyr unnest_wider 将列表列取消嵌套到列中
- R tidyr uncount “计数” DataFrame
- R tidyr unite 通过将字符串粘贴在一起将多列合并为一列
- R tidyr separate_rows 将折叠的列分成多行
- R tidyr extract 使用正则表达式组将字符列提取为多列
- R tidyr chop 砍伐和砍伐
- R tidyr pivot_longer_spec 使用规范将数据从宽转为长
- R tidyr cms_patient_experience 来自医疗保险和医疗补助服务中心的数据
- R tidyr pivot_wider_spec 使用规范将数据从长轴转向宽轴
- R tidyr replace_na 将 NA 替换为指定值
- R tidyr full_seq 在向量中创建完整的值序列
- R tidyr nest 将行嵌套到 DataFrame 的列表列中
- R tidyr separate 使用正则表达式或数字位置将字符列分成多列
- R tidyr pivot_wider 将数据从长轴转向宽轴
- R tidyr nest_legacy Nest() 和 unnest() 的旧版本
- R tidyr separate_longer_delim 将字符串拆分为行
- R tidyr gather 将列收集到键值对中
- R tidyr hoist 将值提升到列表列之外
- R tidyr pivot_longer 将数据从宽转为长
- R tidyr pack 打包和拆包
- R tidyr separate_wider_delim 将字符串拆分为列
- R tidyr drop_na 删除包含缺失值的行
- R tidyr fill 用上一个或下一个值填充缺失值
- R tidyr tidyr_legacy 旧名称修复
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Unnest a list-column of data frames into rows and columns。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。