在R数据帧中填充多列

在R数据帧中填充多列,r,dplyr,R,Dplyr,我有一个叫做流感的数据框,它是每周按组统计的病例数(n) flu <- structure(list(isoweek = c(1, 1, 2, 2, 3, 3, 4, 5, 5), group = c("fluA", "fluB", "fluA", "fluB", "fluA", "fluB", "fluA", "fluA", "fluB" ), n = c(5, 6, 3, 5, 12, 14, 6, 23, 25)), class = c("spec_tbl_df", "tbl_d

我有一个叫做流感的数据框,它是每周按组统计的病例数(n)

flu <- structure(list(isoweek = c(1, 1, 2, 2, 3, 3, 4, 5, 5), group = c("fluA", 
"fluB", "fluA", "fluB", "fluA", "fluB", "fluA", "fluA", "fluB"
), n = c(5, 6, 3, 5, 12, 14, 6, 23, 25)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -9L), spec = structure(list(
    cols = list(isoweek = structure(list(), class = c("collector_double", 
    "collector")), group = structure(list(), class = c("collector_character", 
    "collector")), n = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))
我的问题是,这只适用于报告数周的数据。例如,在第6、7、8周等,如果没有病例报告,我没有数据


如何扩展此填充过程,以将数据帧扩展为0(例如,从isoweeks 6到10),并使每周对应的fluA和fluB为0(每个isoweeks/组对)?

您可以在
complete
中展开多列。假设您在第8周之前需要数据,您可以:

tidyr::complete(flu, isoweek = 1:8, group, fill = list(n = 0))

# A tibble: 16 x 3
#   isoweek group     n
#     <dbl> <chr> <dbl>
# 1       1 fluA      5
# 2       1 fluB      6
# 3       2 fluA      3
# 4       2 fluB      5
# 5       3 fluA     12
# 6       3 fluB     14
# 7       4 fluA      6
# 8       4 fluB      0
# 9       5 fluA     23
#10       5 fluB     25
#11       6 fluA      0
#12       6 fluB      0
#13       7 fluA      0
#14       7 fluB      0
#15       8 fluA      0
#16       8 fluB      0
tidyr::完成(流感,isoweek=1:8,分组,填充=列表(n=0))
#一个tibble:16 x 3
#等周群
#       
#1 fluA 5
#2 1 fluB 6
#3 2 fluA 3
#4 2 fluB 5
#5 3 fluA 12
#6 3 fluB 14
#7 4 fluA 6
#8 4 fluB 0
#9 5 fluA 23
#10 5 fluB 25
#11 6 fluA 0
#12 6 fluB 0
#13 7 fluA 0
#14 7 fluB 0
#15 8 fluA 0
#16 8 fluB 0
tidyr::complete(flu, isoweek = 1:8, group, fill = list(n = 0))

# A tibble: 16 x 3
#   isoweek group     n
#     <dbl> <chr> <dbl>
# 1       1 fluA      5
# 2       1 fluB      6
# 3       2 fluA      3
# 4       2 fluB      5
# 5       3 fluA     12
# 6       3 fluB     14
# 7       4 fluA      6
# 8       4 fluB      0
# 9       5 fluA     23
#10       5 fluB     25
#11       6 fluA      0
#12       6 fluB      0
#13       7 fluA      0
#14       7 fluB      0
#15       8 fluA      0
#16       8 fluB      0