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


R tidyr unnest 将 DataFrame 的列表列解除嵌套为行和列


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 > 要取消嵌套的列表列。

当选择多列时,同一行的值将被回收到它们的共同大小。

...

[Deprecated]: 以前你可以写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

[Deprecated]:现在保留所有列表列;如果输出中有任何您不想要的内容,请使用select()在取消嵌套之前将其删除。

.id

[Deprecated]: 转变df %>% unnest(x, .id = "id")df %>% mutate(id = names(x)) %>% unnest(x)).

.sep

[Deprecated]: 使用names_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/unnest.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Unnest a list-column of data frames into rows and columns。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。