有没有一种干净的方法可以将序列组合成 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
我有以下简单的数据框。我想找到一个干净的 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