将值添加到多行 id 直到指定数量

Add values to multiple rows of id up to specified amount

我有一个数据框,每个 id 有多行,类似于:

id 金额
1 21
1 2
1 3
2 66
2 22
3 10
3 11
3 12
3 13
3 14
3 15
3 16
3 17

我现在想为每个 id 添加更多行,直到每个 id 总共有 8 行。添加行中的金额应为零。所以,f.e.,对于 1,它看起来像这样:

id 金额
1 21
1 2
1 3
1 0
1 0
1 0
1 0
1 0

我怎样才能做到这一点?提前致谢!

我们可以在创建按 'id' 分组的序列列后使用 completerowid - 来自 data.table)。在 complete 中,将 rn 的范围从 1 更改为 8,将 fill 的 'amount' 更改为 0(默认为 NA

library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
     mutate(rn = rowid(id)) %>% 
     complete(id, rn = 1:8, fill = list(amount = 0)) %>% 
     select(-rn)

-输出

# A tibble: 24 x 2
      id amount
   <int>  <dbl>
 1     1     21
 2     1      2
 3     1      3
 4     1      0
 5     1      0
 6     1      0
 7     1      0
 8     1      0
 9     2     66
10     2     22
# … with 14 more rows

数据

df1 <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L), amount = c(21L, 2L, 3L, 66L, 22L, 10L, 11L, 12L, 
13L, 14L, 15L, 16L, 17L)), class = "data.frame", row.names = c(NA, 
-13L))