當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。