使用以下数据:
library(tidyverse)
df <- tibble(
z1 = 1:2,
z2 = 1:2,
prob1 = c(0.1, 0.2),
prob2 = c(0.3, 0.4)
)
df
#> # A tibble: 2 x 4
#> z1 z2 prob1 prob2
#> <int> <int> <dbl> <dbl>
#> 1 1 1 0.100 0.300
#> 2 2 2 0.200 0.400
我想要实现的目标是:
tibble(
z1 = c(1, 1, 2, 2),
z2 = c(1, 2, 1, 2),
prob1 = c(0.1, 0.1, 0.2, 0.2),
prob2 = c(0.3, 0.4, 0.3, 0.4)
)
#> # A tibble: 4 x 4
#> z1 z2 prob1 prob2
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1. 1. 0.100 0.300
#> 2 1. 2. 0.100 0.400
#> 3 2. 1. 0.200 0.300
#> 4 2. 2. 0.200 0.400
我怀疑我应该使用complete()
或dplyr
中的其他功能。
到目前为止,我想出了这个不起作用的解决方案:
df %>%
complete(z1, z2)
#> # A tibble: 4 x 4
#> z1 z2 prob1 prob2
#> <int> <int> <dbl> <dbl>
#> 1 1 1 0.100 0.300
#> 2 1 2 NA NA
#> 3 2 1 NA NA
#> 4 2 2 0.200 0.400
答案 0 :(得分:1)
您希望仅包含z1
/ prob1
和z2
/ prob2
的现有组合,因此您应在这些对中使用nesting()
:
df %>%
complete(nesting(z1, prob1), nesting(z2, prob2))
输出:
# A tibble: 4 x 4
z1 prob1 z2 prob2
<int> <dbl> <int> <dbl>
1 1 0.100 1 0.300
2 1 0.100 2 0.400
3 2 0.200 1 0.300
4 2 0.200 2 0.400