tidyr 1.0.0 为 nest()
和 unnest()
引入了新语法。大多数现有用法应自动转换为新语法,并带有警告。但是,如果您需要快速回滚到以前的行为,这些函数提供了以前的接口。要使旧代码按原样工作,请将以下代码添加到脚本顶部:
library(tidyr)
nest <- nest_legacy
unnest <- unnest_legacy
用法
nest_legacy(data, ..., .key = "data")
unnest_legacy(data, ..., .drop = NA, .id = NULL, .sep = NULL, .preserve = NULL)
参数
- data
-
一个 DataFrame 。
- ...
-
要取消嵌套的列的规范。使用裸变量名或变量函数。如果省略,则默认为所有list-cols。
- .key
-
新列的名称,作为字符串或符号。该参数通过表达式传递并支持quasiquotation(您可以取消引用字符串和符号)。该名称是从带有
rlang::ensym()
的表达式中捕获的(请注意,这种符号不代表实际对象的接口现在在 tidyverse 中不鼓励使用;我们在这里支持它是为了向后兼容)。 - .drop
-
是否应该删除其他列表列?默认情况下,如果取消指定列的嵌套需要复制行,
unnest()
将删除它们。 - .id
-
DataFrame 标识符 - 如果提供,将创建一个名为
.id
的新列,提供唯一标识符。如果列表列已命名,这将非常有用。 - .sep
-
如果非
NULL
,则未嵌套 DataFrame 列的名称将组合原始 list-col 的名称与嵌套 DataFrame 的名称,并用.sep
分隔。 - .preserve
-
(可选)要在输出中保留的列表列。它们将以与原子向量相同的方式进行复制。这具有
dplyr::select()
语义,因此您可以使用.preserve = c(x, y)
或.preserve = starts_with("list")
保留多个变量。
例子
# Nest and unnest are inverses
df <- tibble(x = c(1, 1, 2), y = 3:1)
df %>% nest_legacy(y)
#> # A tibble: 2 × 2
#> x data
#> <dbl> <list>
#> 1 1 <tibble [2 × 1]>
#> 2 2 <tibble [1 × 1]>
df %>% nest_legacy(y) %>% unnest_legacy()
#> # A tibble: 3 × 2
#> x y
#> <dbl> <int>
#> 1 1 3
#> 2 1 2
#> 3 2 1
# nesting -------------------------------------------------------------------
as_tibble(iris) %>% nest_legacy(!Species)
#> # A tibble: 3 × 2
#> Species data
#> <fct> <list>
#> 1 setosa <tibble [50 × 4]>
#> 2 versicolor <tibble [50 × 4]>
#> 3 virginica <tibble [50 × 4]>
as_tibble(chickwts) %>% nest_legacy(weight)
#> # A tibble: 6 × 2
#> feed data
#> <fct> <list>
#> 1 horsebean <tibble [10 × 1]>
#> 2 linseed <tibble [12 × 1]>
#> 3 soybean <tibble [14 × 1]>
#> 4 sunflower <tibble [12 × 1]>
#> 5 meatmeal <tibble [11 × 1]>
#> 6 casein <tibble [12 × 1]>
# unnesting -----------------------------------------------------------------
df <- tibble(
x = 1:2,
y = list(
tibble(z = 1),
tibble(z = 3:4)
)
)
df %>% unnest_legacy(y)
#> # A tibble: 3 × 2
#> x z
#> <int> <dbl>
#> 1 1 1
#> 2 2 3
#> 3 2 4
# 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_legacy(a, b)
#> # A tibble: 3 × 3
#> c a b
#> <dbl> <chr> <dbl>
#> 1 11 a 1
#> 2 11 b 2
#> 3 22 c 3
# If you omit the column names, it'll unnest all list-cols
df %>% unnest_legacy()
#> # A tibble: 3 × 3
#> c a b
#> <dbl> <chr> <dbl>
#> 1 11 a 1
#> 2 11 b 2
#> 3 22 c 3
相关用法
- R tidyr nest 将行嵌套到 DataFrame 的列表列中
- R tidyr separate_rows 将折叠的列分成多行
- R tidyr extract 使用正则表达式组将字符列提取为多列
- R tidyr chop 砍伐和砍伐
- R tidyr pivot_longer_spec 使用规范将数据从宽转为长
- R tidyr unnest_longer 将列表列取消嵌套到行中
- R tidyr uncount “计数” DataFrame
- R tidyr cms_patient_experience 来自医疗保险和医疗补助服务中心的数据
- R tidyr pivot_wider_spec 使用规范将数据从长轴转向宽轴
- R tidyr replace_na 将 NA 替换为指定值
- R tidyr unnest_wider 将列表列取消嵌套到列中
- R tidyr full_seq 在向量中创建完整的值序列
- R tidyr separate 使用正则表达式或数字位置将字符列分成多列
- R tidyr pivot_wider 将数据从长轴转向宽轴
- 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 旧名称修复
- R tidyr complete 完成缺少数据组合的 DataFrame
- R tidyr expand 扩展 DataFrame 以包含所有可能的值组合
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Legacy versions of nest() and unnest()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。