数据集如下:
a b c d
a1 b1 1 0
a1 b1 0 1
a1 b2 0 1
a1 b2 1 0
a2 b3 1 0
a2 b3 1 0
a2 b4 0 0
如果 a1 和 b1 为一对,则 c 列的虚拟值为 1 和 0,d 列的虚拟值为 0 和 1。我希望每列中的每一对都有最大的虚拟值。
输出应该是:
a b c d
a1 b1 1 1
a1 b2 1 1
a2 b3 1 0
a2 b4 0 0
我尝试了函数“slice_max(c, by (c(a,b))”,但它每次只能执行一列,如果我先将它用于 c 列,则对于 a1&b1 对,第 2&3 列将被删除, d 将仅为 0。
summarize()
包中的 dplyr
的一个很好的案例。
这是采用
a
参数中描述的每对 b
和 .by
,并找到 c
的最大值和 d
的最大值。
data <- tibble::tibble(
a = c("a1", "a1", "a1", "a1", "a2", "a2", "a2"),
b = c("b1", "b1", "b2", "b2", "b3", "b3", "b4"),
c = c( 1, 0, 0, 1, 1, 1, 0),
d = c( 0, 1, 1, 0, 0, 0, 0)
)
data
#> # A tibble: 7 × 4
#> a b c d
#> <chr> <chr> <dbl> <dbl>
#> 1 a1 b1 1 0
#> 2 a1 b1 0 1
#> 3 a1 b2 0 1
#> 4 a1 b2 1 0
#> 5 a2 b3 1 0
#> 6 a2 b3 1 0
#> 7 a2 b4 0 0
data |> dplyr::summarize(
c = max(c),
d = max(d),
.by = c(a, b)
)
#> # A tibble: 4 × 4
#> a b c d
#> <chr> <chr> <dbl> <dbl>
#> 1 a1 b1 1 1
#> 2 a1 b2 1 1
#> 3 a2 b3 1 0
#> 4 a2 b4 0 0