在嵌套级别中制作显式隐式缺失值

Making explicit implicit missing values in nested levels

我正在尝试用缺失的级别来完成我的数据框。

当前输出

id foo bar val
1   a   x   7
2   a   y   9
3   a   z   6
4   b   x  10
5   b   y   4
6   b   z   5
7   c   y   2

数据

structure(list(id = c("1", "2", "3", "4", "5", "6", "7"), foo = c("a", 
"a", "a", "b", "b", "b", "c"), bar = c("x", "y", "z", "x", "y", 
"z", "y"), val = c("7", "9", "6", "10", "4", "5", "2")), .Names = c("id", 
"foo", "bar", "val"), row.names = c(NA, -7L), class = "data.frame")

我想用 0s 明确 cz 的缺失嵌套级别。我可以使用 expand.grid 找到解决方法,但无法使用 tidyr 获得所需的输出。

期望的输出:

id foo bar val
1   a   x   7
2   a   y   9
3   a   z   6
4   b   x   10
5   b   y   4
6   b   z   5
7   c   x   0
8   c   y   2
9   c   z   0

提前致谢!

鉴于您正在寻找 tidyr 解决方案,您应该查看 tidyr::complete(这正是您所追求的):

library(tidyverse)

complete(df, foo, bar, fill = list(val = 0)) %>% select(-id)
#> # A tibble: 9 x 3
#>   foo   bar   val  
#>   <chr> <chr> <chr>
#> 1 a     x     7    
#> 2 a     y     9    
#> 3 a     z     6    
#> 4 b     x     10   
#> 5 b     y     4    
#> 6 b     z     5    
#> 7 c     x     0    
#> 8 c     y     2    
#> 9 c     z     0