如何按组复制行 n 次并更改 R 中的一个特定列值?

How do you duplicate rows n times by group and change one specific column value in R?

我正在尝试按组创建重复的行。我要创建的重复行数因组而异,我想固定一列的值 Attended = 0.

我正在使用的数据集 DF 的一个最小工作示例是:

ID  Demo  Attended  t
1   3     1         1
1   3     1         3
1   3     0         4
1   3     1         5
2   5     1         2
2   5     1         4
3   7     0         1

对于上面的示例,假设我希望每个人 (ID) 有 5 行,Demo 在每个人的所有行中都相同。因此,我必须为 ID = 1 创建 1 行,为 ID = 2 创建 3 行,为 ID = 4 创建 4 行(我想为每个子组动态计算这些)。对于我生成的新行,我希望 Attended = 0 和 t 接受缺失索引的值,以便最终输出为:

ID  Demo  Attended  t
1   3     1         1
1   3     1         3
1   3     0         4
1   3     1         5
1   3     0         2
2   5     1         2
2   5     1         4
2   5     0         1
2   5     0         3
2   5     0         5
3   7     0         1
3   7     0         2
3   7     0         3
3   7     0         4
3   7     0         5

我已经能够按组创建重复行,但无法弄清楚如何按参与者创建不同数量的重复项并正确填写索引列 t。

这是我的工作:

DF %>%
  group_by(ID) %>%
  rbind(., mutate(., t = row_number()))

我一直在尝试使用 slice() 创建正确数量的重复项并尝试使 t 值完全符合我的要求,但无济于事。

如有任何帮助,我们将不胜感激!

一个 tidyverse 可能是:

df %>%
 complete(t, nesting(ID), fill = list(Attended = 0)) %>%
 arrange(ID)

       t    ID  Demo Attended
   <int> <int> <int>    <dbl>
 1     1     1     3        1
 2     2     1     3        0
 3     3     1     3        1
 4     4     1     3        0
 5     5     1     3        1
 6     1     2     5        0
 7     2     2     5        1
 8     3     2     5        0
 9     4     2     5        1
10     5     2     5        0
11     1     3     7        0
12     2     3     7        0
13     3     3     7        0
14     4     3     7        0
15     5     3     7        0