有没有一种干净的方法可以将序列组合成 tidyverse 中的子序列?

Is there a clean way to compose sequences into there subsequences in the tidyverse?

我有以下简单的数据框。我想找到一个干净的 tidyverse 解决方案来将每个序列逐行分解为其子序列。我想当你看到这些例子时,我的意思会很清楚。这是起始代码。

data.frame(acct=c(100467,100783,101233),
x1=c(4,2,4),
x2=c(3,3,4),
x3=c(2,4,4))

它产生以下输出:

我想对其进行修改,使其基本上产生以下代码的输出:

data.frame(acct=c(100467,100467,100467,100783,100783,100783),
x1=c(4,4,4,2,2,2),
x2=c(3,3,NA,3,3,NA),
x3=c(2,NA,NA,4,NA,NA))

这给了我以下控制台输出:

在 tidyverse 中完成此操作的最干净、最简单的方法是什么?数据框包含更多要分解的序列。

这不是一个干净的方法,但它有效:

df %>% 
  group_by(acct) %>% 
  group_map(~ accumulate(.x, c)) %>% 
  lapply(., function(x) plyr::ldply(x, rbind)) %>% 
  bind_rows() %>% 
  mutate(.id = rep(df$acct, each=3)) %>% 
  rename(acct = .id) %>% rename_with(~ paste0("x", .x), -acct)

    acct x1 x2 x3
1 100467  4 NA NA
2 100467  4  3 NA
3 100467  4  3  2
4 100783  2 NA NA
5 100783  2  3 NA
6 100783  2  3  4
7 101233  4 NA NA
8 101233  4  4 NA
9 101233  4  4  4