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

时间:2019-04-14 17:13:25

标签: r plyr

我正在尝试按组创建重复的行。我要创建的重复行数因组而异,并且我想将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值恰好是我想要的值,但无济于事。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

一种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