在 R 中的条件后添加填充行

Add filled rows after a condition in R

我基本上希望每个唯一 ID 都有三行。 每个唯一 ID 必须包含 kind=1、kind=2、kind=3 的行。

有些人已经拥有全部三个,但有些人只有一行观察结果,例如只有第一种和第二种。 我还想为新添加的行用“0”(不是 NA)填充值 A 和 B。

我是 R 的新手,所以我真的不知道如何开始。

id = c("u_1", "u_1", "b_1", "u_2", "u_2", "u_2")
kind = c("1", "2", "1", "1", "2", "3")
A = c(3, 4, 11, 3, 4, 6)
B = c(4, 1, 6, 2, 3, 8)

df <- data.frame(id, kind, A, B)

一切皆有可能。一个人 (id) 可以有种类 1 和 2,但不能有种类 3;他们只能有1个,只有2个,只有3个;他们只能有 2 和 3 但不能有 1,等等...

所以我希望这段代码最终看起来像下面这样:

id 种类 一个
u_1 1 3 4
u_1 2 4 1
u_1 3 0 0
b_1 1 11 6
b_1 2 0 0
b_1 3 0 0
u_2 1 3 2
u_2 2 4 3
u_2 3 6 8

非常感谢您花时间考虑我的问题!

试试 tidyr::complete:

library(tidyr)

id = c("u_1", "u_1", "b_1", "u_2", "u_2", "u_2")
kind = c("1", "2", "1", "1", "2", "3")
A = c(3, 4, 11, 3, 4, 6)
B = c(4, 1, 6, 2, 3, 8)

df <- data.frame(id, kind, A, B)

complete(df, id, kind, fill = list(A = 0, B =0))
#> # A tibble: 9 x 4
#>   id    kind      A     B
#>   <chr> <chr> <dbl> <dbl>
#> 1 b_1   1        11     6
#> 2 b_1   2         0     0
#> 3 b_1   3         0     0
#> 4 u_1   1         3     4
#> 5 u_1   2         4     1
#> 6 u_1   3         0     0
#> 7 u_2   1         3     2
#> 8 u_2   2         4     3
#> 9 u_2   3         6     8

reprex package (v2.0.0)

于 2021-06-04 创建