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