Unnest 將包含 DataFrame 的列表列擴展為行和列。
用法
unnest(
data,
cols,
...,
keep_empty = FALSE,
ptype = NULL,
names_sep = NULL,
names_repair = "check_unique",
.drop = deprecated(),
.id = deprecated(),
.sep = deprecated(),
.preserve = deprecated()
)
參數
- data
-
一個 DataFrame 。
- cols
-
<
tidy-select
> 要取消嵌套的列表列。當選擇多列時,同一行的值將被回收到它們的共同大小。
- ...
-
: 以前你可以寫
df %>% unnest(x, y, z)
。轉換成df %>% unnest(c(x, y, z))
。如果您之前創建了一個新變量unnest()
你現在需要明確地這樣做mutate()
。轉變df %>% unnest(y = fun(x, y, z))
到df %>% mutate(y = fun(x, y, z)) %>% unnest(y)
. - keep_empty
-
默認情況下,對於要取消切割/取消嵌套的列表中的每個元素,您都會獲得一行輸出。這意味著如果存在大小為 0 的元素(例如
NULL
或空 DataFrame 或向量),則整行將從輸出中刪除。如果要保留所有行,請使用keep_empty = TRUE
將 size-0 元素替換為單行缺失值。 - ptype
-
(可選)列 name-prototype 的命名列表對強製
cols
,覆蓋通過組合各個值猜測的默認值。或者,可以提供單個空 ptype,它將應用於所有cols
。 - names_sep
-
如果默認為
NULL
,則外部名稱將來自內部名稱。如果是字符串,則外部名稱將通過將外部列名稱和內部列名稱粘貼在一起形成,並用names_sep
分隔。 - names_repair
-
用於檢查輸出數據幀是否具有有效名稱。必須是以下選項之一:
-
"minimal
“:沒有名稱修複或檢查,超出基本存在, -
"unique
“:確保名稱唯一且不為空, -
"check_unique
":(默認),不進行名稱修複,但檢查它們是否唯一, -
"universal
“:使名稱具有唯一性和語法性 -
函數:應用自定義名稱修複。
-
tidyr_legacy :使用 tidyr 0.8 中的名稱 Repair。
-
公式:purrr-style 匿名函數(參見
rlang::as_function()
)
有關這些術語以及用於執行它們的策略的更多詳細信息,請參閱
vctrs::vec_as_names()
。 -
- .drop, .preserve
- .id
-
: 轉變
df %>% unnest(x, .id = "id")
到df %>% mutate(id = names(x)) %>% unnest(x))
. - .sep
新語法
tidyr 1.0.0 為 nest()
和 unnest()
引入了新語法,其設計與其他函數更加相似。轉換為新語法應該很簡單(由您將收到的消息引導),但如果您隻需要運行舊分析,則可以使用 nest_legacy()
和 unnest_legacy()
輕鬆恢複到以前的行為,如下所示:
library(tidyr)
nest <- nest_legacy
unnest <- unnest_legacy
也可以看看
其他矩形:hoist()
、unnest_longer()
、unnest_wider()
例子
# unnest() is designed to work with lists of data frames
df <- tibble(
x = 1:3,
y = list(
NULL,
tibble(a = 1, b = 2),
tibble(a = 1:3, b = 3:1, c = 4)
)
)
# unnest() recycles input rows for each row of the list-column
# and adds a column for each column
df %>% unnest(y)
#> # A tibble: 4 × 4
#> x a b c
#> <int> <dbl> <dbl> <dbl>
#> 1 2 1 2 NA
#> 2 3 1 3 4
#> 3 3 2 2 4
#> 4 3 3 1 4
# input rows with 0 rows in the list-column will usually disappear,
# but you can keep them (generating NAs) with keep_empty = TRUE:
df %>% unnest(y, keep_empty = TRUE)
#> # A tibble: 5 × 4
#> x a b c
#> <int> <dbl> <dbl> <dbl>
#> 1 1 NA NA NA
#> 2 2 1 2 NA
#> 3 3 1 3 4
#> 4 3 2 2 4
#> 5 3 3 1 4
# Multiple columns ----------------------------------------------------------
# You can unnest multiple columns simultaneously
df <- tibble(
x = 1:2,
y = list(
tibble(a = 1, b = 2),
tibble(a = 3:4, b = 5:6)
),
z = list(
tibble(c = 1, d = 2),
tibble(c = 3:4, d = 5:6)
)
)
df %>% unnest(c(y, z))
#> # A tibble: 3 × 5
#> x a b c d
#> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 2 1 2
#> 2 2 3 5 3 5
#> 3 2 4 6 4 6
# Compare with unnesting one column at a time, which generates
# the Cartesian product
df %>%
unnest(y) %>%
unnest(z)
#> # A tibble: 5 × 5
#> x a b c d
#> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 2 1 2
#> 2 2 3 5 3 5
#> 3 2 3 5 4 6
#> 4 2 4 6 3 5
#> 5 2 4 6 4 6
相關用法
- R tidyr unnest_longer 將列表列取消嵌套到行中
- R tidyr unnest_wider 將列表列取消嵌套到列中
- 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 of data frames into rows and columns。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。