如何在 R 中创建递归嵌套 tibble

问题描述 投票:0回答:1

我试图创建我所说的递归嵌套 tibble,一个具有 x 行的嵌套 tibble,使得每个 x 行嵌套 y 的以下 n 行。这是我想要实现的目标的一个例子。

鉴于tibble df:

df <- tibble(x = 5:1, y = 5:1)

我正在尝试生成一个如下所示的嵌套小标题:(其中数据是嵌套列)

我想出的一种方法是使用 uncount 来复制原始 tibble,然后添加一个 id 列来表示每个版本的 tibble。接下来,我对 id 列进行分组,然后嵌套 tibble。从这里为每个组创建一个索引列并过滤掉我不想要的内容。这可能会让我到达那里,但必须有一种更优雅的方式来实现这一目标。我很感激任何人的任何想法或见解。

df <- tibble(x = 5:1, y = 5:1)
z <- uncount(df, 5, .id = "id")
z <- z %>% 
  arrange(id) %>% 
  select(id, x, y) %>% 
  group_by(id) %>% 
  mutate(n = row_number()-1)
r tidyverse tidyr nested-lists
1个回答
0
投票

使用

purrr::map
(或
lapply
)和
tidyr::unnest
你可以这样做:

library(dplyr, warn = FALSE)
library(purrr)
library(tidyr)

df <- tibble(x = 5:1, y = 5:1)

df |>
  mutate(
    data = map(y, ~ tibble(y = rev(seq_len(.x - 1)))),
    .keep = "unused"
  ) |> 
  unnest(data, keep_empty = TRUE)
#> # A tibble: 11 × 2
#>        x     y
#>    <int> <int>
#>  1     5     4
#>  2     5     3
#>  3     5     2
#>  4     5     1
#>  5     4     3
#>  6     4     2
#>  7     4     1
#>  8     3     2
#>  9     3     1
#> 10     2     1
#> 11     1    NA
© www.soinside.com 2019 - 2024. All rights reserved.