我试图创建我所说的递归嵌套 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)
使用
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