通过向量增加行数

Increase number of rows by vector

我有这个数据框:

df <- data.frame(
  ID = 1:5,
  Subject = c("A","A","B","B","C"),
  Duration = c(3,2,2,4,5)
)

任务很简单:我需要通过列 Duration 中的向量增加行数。也就是说,例如,第 1 行中的 Duration 是 3;所以这一行应该一式三份。第 2 行的持续时间为 2;所以这一行应该被复制,等等。如何做到这一点?

预计

  ID Subject Duration
1  1       A        3
2  1       A        3
3  1       A        3
4  2       A        2
5  2       A        2
6  3       B        2
7  3       B        2
8  4       B        4
9  4       B        4
10 4       B        4
11 4       B        4
12 5       C        5
13 5       C        5
14 5       C        5
15 5       C        5
16 5       C        5

我很感激任何解决方案,尤其是 dplyr 解决方案。

您需要的功能是tidyr::uncount

library(tidyr)

uncount(df, Duration, .remove = F)

   ID Subject Duration
1   1       A        3
2   1       A        3
3   1       A        3
4   2       A        2
5   2       A        2
6   3       B        2
7   3       B        2
8   4       B        4
9   4       B        4
10  4       B        4
11  4       B        4
12  5       C        5
13  5       C        5
14  5       C        5
15  5       C        5
16  5       C        5

我们可以使用 slice:

library(dplyr)
df %>% 
  slice(rep(row_number(), Duration))
   ID Subject Duration
1   1       A        3
2   1       A        3
3   1       A        3
4   2       A        2
5   2       A        2
6   3       B        2
7   3       B        2
8   4       B        4
9   4       B        4
10  4       B        4
11  4       B        4
12  5       C        5
13  5       C        5
14  5       C        5
15  5       C        5
16  5       C        5