首页 > 解决方案 > 在 r 中插入缺少周数的行

问题描述

对于大型数据集,我尝试为每个客户 ID 插入缺失的周数,其对应的数量为 0。周从 w3 开始,一直到 w7。

df <- data.frame(cust_id = c("111","111","222","222","222","333","333","333","333"),
             week = c("w4","w5","w4","w5","w6","w3","w4","w5","w6"),
             amount = c(23,34,10,12,35,12,23,15,56))


cust_id week amount
  111   w4     23
  111   w5     34
  222   w4     10
  222   w5     12
  222   w6     35
  333   w3     12
  333   w4     23
  333   w5     15
  333   w6     56

例如 cust_id: 111,缺少 w3、w6 和 w7。我想为 cust_id 111 插入那些缺失的周数和相应的数量 = 0,如下所示。

cust_id week amount
  111   w3      0
  111   w4     23
  111   w5     34
  111   w6      0
  111   w7      0

任何帮助都会很棒,谢谢!

标签: r

解决方案


使用tidyr::complete

tidyr::complete(df, cust_id, week = paste0('w', 3:7), fill = list(amount = 0))

#   cust_id week  amount
#   <chr>   <chr>  <dbl>
# 1 111     w3         0
# 2 111     w4        23
# 3 111     w5        34
# 4 111     w6         0
# 5 111     w7         0
# 6 222     w3         0
# 7 222     w4        10
# 8 222     w5        12
# 9 222     w6        35
#10 222     w7         0
#11 333     w3        12
#12 333     w4        23
#13 333     w5        15
#14 333     w6        56
#15 333     w7         0

推荐阅读