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


R tidyr unnest_wider 將列表列取消嵌套到列中


unnest_wider() 將列表列的每個元素轉換為一列。它最自然地適合列表列,其中每個元素都被命名,並且行與行的名稱是一致的。 unnest_wider() 保留 x 的行,同時修改列。

vignette("rectangle") 中了解更多信息。

用法

unnest_wider(
  data,
  col,
  names_sep = NULL,
  simplify = TRUE,
  strict = FALSE,
  names_repair = "check_unique",
  ptype = NULL,
  transform = NULL
)

參數

data

一個 DataFrame 。

col

< tidy-select > 要取消嵌套的列表列。

當選擇多列時,同一行的值將被回收到它們的共同大小。

names_sep

如果是 NULL (默認值),名稱將保持原樣。如果是字符串,則外部名稱和內部名稱將使用 names_sep 作為分隔符粘貼在一起。

如果任何未嵌套的值未命名,則必須提供names_sep,否則將引發錯誤。當提供 names_sep 時,會自動為未命名值生成遞增的整數序列名稱。

simplify

如果是 TRUE ,將嘗試將長度為 1 的向量列表簡化為原子向量。也可以是包含 TRUEFALSE 的命名列表,聲明是否嘗試簡化特定列。如果提供了命名列表,則任何未指定列的默認值是 TRUE

strict

指定是否應用嚴格的 vctr 類型規則的單個邏輯。如果 FALSE ,則嵌套在列表列中的鍵入空值(如 list()integer() )將被視為像 NULL 一樣,並且不會影響未嵌套列的類型。這在使用 JSON 時非常有用,其中空值往往會丟失其類型信息並顯示為 list()

names_repair

用於檢查輸出數據幀是否具有有效名稱。必須是以下選項之一:

  • "minimal“:沒有名稱修複或檢查,超出基本存在,

  • "unique“:確保名稱唯一且不為空,

  • "check_unique":(默認),不進行名稱修複,但檢查它們是否唯一,

  • "universal“:使名稱具有唯一性和語法性

  • 函數:應用自定義名稱修複。

  • tidyr_legacy :使用 tidyr 0.8 中的名稱 Repair。

  • 公式:purrr-style 匿名函數(參見rlang::as_function())

有關這些術語以及用於執行它們的策略的更多詳細信息,請參閱vctrs::vec_as_names()

ptype

(可選)原型的命名列表,聲明每個組件所需的輸出類型。或者,可以提供一個空原型,它將應用於所有組件。如果您想檢查每個元素是否具有您在簡化時期望的類型,請使用此參數。

如果已指定 ptype,但無法進行 simplify = FALSE 或簡化,則將返回 list-of 列,並且每個元素的類型為 ptype

transform

(可選)應用於每個組件的轉換函數的命名列表。或者,可以提供單個函數,該函數將應用於所有組件。如果您想在提取單個元素時對其進行轉換或解析,請使用此參數。

當同時提供 ptypetransform 時,transformptype 之前應用。

也可以看看

其他矩形:hoist()unnest_longer()unnest()

例子

df <- tibble(
  character = c("Toothless", "Dory"),
  metadata = list(
    list(
      species = "dragon",
      color = "black",
      films = c(
        "How to Train Your Dragon",
        "How to Train Your Dragon 2",
        "How to Train Your Dragon: The Hidden World"
      )
    ),
    list(
      species = "blue tang",
      color = "blue",
      films = c("Finding Nemo", "Finding Dory")
    )
  )
)
df
#> # A tibble: 2 × 2
#>   character metadata        
#>   <chr>     <list>          
#> 1 Toothless <named list [3]>
#> 2 Dory      <named list [3]>

# Turn all components of metadata into columns
df %>% unnest_wider(metadata)
#> # A tibble: 2 × 4
#>   character species   color films    
#>   <chr>     <chr>     <chr> <list>   
#> 1 Toothless dragon    black <chr [3]>
#> 2 Dory      blue tang blue  <chr [2]>

# Choose not to simplify list-cols of length-1 elements
df %>% unnest_wider(metadata, simplify = FALSE)
#> # A tibble: 2 × 4
#>   character species   color     films    
#>   <chr>     <list>    <list>    <list>   
#> 1 Toothless <chr [1]> <chr [1]> <chr [3]>
#> 2 Dory      <chr [1]> <chr [1]> <chr [2]>
df %>% unnest_wider(metadata, simplify = list(color = FALSE))
#> # A tibble: 2 × 4
#>   character species   color     films    
#>   <chr>     <chr>     <list>    <list>   
#> 1 Toothless dragon    <chr [1]> <chr [3]>
#> 2 Dory      blue tang <chr [1]> <chr [2]>

# You can also widen unnamed list-cols:
df <- tibble(
  x = 1:3,
  y = list(NULL, 1:3, 4:5)
)
# but you must supply `names_sep` to do so, which generates automatic names:
df %>% unnest_wider(y, names_sep = "_")
#> # A tibble: 3 × 4
#>       x   y_1   y_2   y_3
#>   <int> <int> <int> <int>
#> 1     1    NA    NA    NA
#> 2     2     1     2     3
#> 3     3     4     5    NA

# 0-length elements ---------------------------------------------------------
# The defaults of `unnest_wider()` treat empty types (like `list()`) as `NULL`.
json <- list(
  list(x = 1:2, y = 1:2),
  list(x = list(), y = 3:4),
  list(x = 3L, y = list())
)

df <- tibble(json = json)
df %>%
  unnest_wider(json)
#> # A tibble: 3 × 2
#>   x         y        
#>   <list>    <list>   
#> 1 <int [2]> <int [2]>
#> 2 <NULL>    <int [2]>
#> 3 <int [1]> <NULL>   

# To instead enforce strict vctrs typing rules, use `strict`
df %>%
  unnest_wider(json, strict = TRUE)
#> # A tibble: 3 × 2
#>   x          y         
#>   <list>     <list>    
#> 1 <int [2]>  <int [2]> 
#> 2 <list [0]> <int [2]> 
#> 3 <int [1]>  <list [0]>
源代碼:R/unnest-wider.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Unnest a list-column into columns。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。