当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R tidyr nest_legacy Nest() 和 unnest() 的旧版本


[Superseded]

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/nest-legacy.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Legacy versions of nest() and unnest()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。