如果我理解正确
tidyverse
library(tidyverse)
df <- structure(
list(
Var1 = c(0L, 0L, 0L, 0L),
Var2 = c(0L, 0L, 0L,
0L),
Var3 = c(0L, 0L, 0L, 0L),
Var4 = c(0L, 0L, 0L, 1L),
Var5 = c(0L,
1L, 2L, 0L)
),
class = "data.frame",
row.names = c(NA,-4L)
)
vars <- syms(c("Var1", "Var2", "Var3", "Var4", "Var5"))
df %>%
group_by(!!!vars) %>%
add_count() %>%
complete(Var1 = 0:3, Var2 = 0:2, Var3 = 0:2, Var4 = 0:2, Var5 = 0:2, fill = list(n = 0)) %>%
ungroup()
#> # A tibble: 1,296 x 6
#> Var1 Var2 Var3 Var4 Var5 n
#> <int> <int> <int> <int> <int> <dbl>
#> 1 0 0 0 0 0 1
#> 2 0 0 0 0 1 1
#> 3 0 0 0 0 2 1
#> 4 0 0 0 1 0 1
#> 5 0 0 0 1 1 0
#> 6 0 0 0 1 2 0
#> 7 0 0 0 2 0 0
#> 8 0 0 0 2 1 0
#> 9 0 0 0 2 2 0
#> 10 0 0 1 0 0 0
#> # ... with 1,286 more rows
由reprex package (v2.0.0) 于 2021-07-06 创建
更新
df_count <- df %>%
group_by(!!!vars) %>%
add_count()
Var1 = 0:3
Var2 = 0:2
Var3 = 0:2
Var4 = 0:2
Var5 = 0:2
expand_grid(!!!vars) %>%
left_join(df_count) %>%
mutate(n = replace_na(n, 0))