unnest_longer()
将列表列的每个元素转换为行。它最自然地适合列表列,其中元素未命名并且每个元素的长度随行而变化。
unnest_longer()
一般在修改行数的同时保留x
的列数。
在vignette("rectangle")
中了解更多信息。
用法
unnest_longer(
data,
col,
values_to = NULL,
indices_to = NULL,
indices_include = NULL,
keep_empty = FALSE,
names_repair = "check_unique",
simplify = TRUE,
ptype = NULL,
transform = NULL
)
参数
- data
-
一个 DataFrame 。
- col
-
<
tidy-select
> 要取消嵌套的列表列。当选择多列时,同一行的值将被回收到它们的共同大小。
- values_to
-
给出用于存储未嵌套值的列名称的字符串。如果在
col
中指定了多个列,则这也可以是包含"{col}"
的粘合字符串,以提供列名称的模板。默认值NULL
为输出列提供与输入列相同的名称。 - indices_to
-
给出列名(或多个名称)的字符串,用于存储值的内部名称或位置(如果未命名)。如果在
col
中指定了多个列,则这也可以是包含"{col}"
的粘合字符串,以提供列名称的模板。默认值NULL
为输出列提供与values_to
相同的名称,但后缀为"_id"
。 - indices_include
-
指定是否添加索引列的单个逻辑值。如果任何值具有内部名称,则索引列将是这些名称的字符向量,否则它将是位置的整数向量。如果
NULL
,如果任何值具有内部名称或者提供了indices_to
,则默认为TRUE
。如果提供
indices_to
,则indices_include
不能是FALSE
。 - keep_empty
-
默认情况下,对于要取消切割/取消嵌套的列表中的每个元素,您都会获得一行输出。这意味着如果存在大小为 0 的元素(例如
NULL
或空 DataFrame 或向量),则整行将从输出中删除。如果要保留所有行,请使用keep_empty = TRUE
将 size-0 元素替换为单行缺失值。 - names_repair
-
用于检查输出数据帧是否具有有效名称。必须是以下选项之一:
-
"minimal
“:没有名称修复或检查,超出基本存在, -
"unique
“:确保名称唯一且不为空, -
"check_unique
":(默认),不进行名称修复,但检查它们是否唯一, -
"universal
“:使名称具有唯一性和语法性 -
函数:应用自定义名称修复。
-
tidyr_legacy :使用 tidyr 0.8 中的名称 Repair。
-
公式:purrr-style 匿名函数(参见
rlang::as_function()
)
有关这些术语以及用于执行它们的策略的更多详细信息,请参阅
vctrs::vec_as_names()
。 -
- simplify
-
如果是
TRUE
,将尝试将长度为 1 的向量列表简化为原子向量。也可以是包含TRUE
或FALSE
的命名列表,声明是否尝试简化特定列。如果提供了命名列表,则任何未指定列的默认值是TRUE
。 - ptype
-
(可选)原型的命名列表,声明每个组件所需的输出类型。或者,可以提供一个空原型,它将应用于所有组件。如果您想检查每个元素是否具有您在简化时期望的类型,请使用此参数。
如果已指定
ptype
,但无法进行simplify = FALSE
或简化,则将返回 list-of 列,并且每个元素的类型为ptype
。 - transform
-
(可选)应用于每个组件的转换函数的命名列表。或者,可以提供单个函数,该函数将应用于所有组件。如果您想在提取单个元素时对其进行转换或解析,请使用此参数。
当同时提供
ptype
和transform
时,transform
在ptype
之前应用。
也可以看看
其他矩形:hoist()
、unnest_wider()
、unnest()
例子
# `unnest_longer()` is useful when each component of the list should
# form a row
df <- tibble(
x = 1:4,
y = list(NULL, 1:3, 4:5, integer())
)
df %>% unnest_longer(y)
#> # A tibble: 5 × 2
#> x y
#> <int> <int>
#> 1 2 1
#> 2 2 2
#> 3 2 3
#> 4 3 4
#> 5 3 5
# Note that empty values like `NULL` and `integer()` are dropped by
# default. If you'd like to keep them, set `keep_empty = TRUE`.
df %>% unnest_longer(y, keep_empty = TRUE)
#> # A tibble: 7 × 2
#> x y
#> <int> <int>
#> 1 1 NA
#> 2 2 1
#> 3 2 2
#> 4 2 3
#> 5 3 4
#> 6 3 5
#> 7 4 NA
# If the inner vectors are named, the names are copied to an `_id` column
df <- tibble(
x = 1:2,
y = list(c(a = 1, b = 2), c(a = 10, b = 11, c = 12))
)
df %>% unnest_longer(y)
#> # A tibble: 5 × 3
#> x y y_id
#> <int> <dbl> <chr>
#> 1 1 1 a
#> 2 1 2 b
#> 3 2 10 a
#> 4 2 11 b
#> 5 2 12 c
# Multiple columns ----------------------------------------------------------
# If columns are aligned, you can unnest simultaneously
df <- tibble(
x = 1:2,
y = list(1:2, 3:4),
z = list(5:6, 7:8)
)
df %>%
unnest_longer(c(y, z))
#> # A tibble: 4 × 3
#> x y z
#> <int> <int> <int>
#> 1 1 1 5
#> 2 1 2 6
#> 3 2 3 7
#> 4 2 4 8
# This is important because sequential unnesting would generate the
# Cartesian product of the rows
df %>%
unnest_longer(y) %>%
unnest_longer(z)
#> # A tibble: 8 × 3
#> x y z
#> <int> <int> <int>
#> 1 1 1 5
#> 2 1 1 6
#> 3 1 2 5
#> 4 1 2 6
#> 5 2 3 7
#> 6 2 3 8
#> 7 2 4 7
#> 8 2 4 8
相关用法
- R tidyr unnest_wider 将列表列取消嵌套到列中
- R tidyr unnest 将 DataFrame 的列表列解除嵌套为行和列
- 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 into rows。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。