我有一个示例测试数据框:
YEAR <- c(2019, 2019,2020, 2020, 2019,2020,2020,2019,2020)
GROUP <- c("A","A","A", "A","B","B","B","A","B")
VALUE <- c(1,4,3, 8 ,5,3,2,6,7)
STATUS <- c("on","off", "off", "on", "on", "on", "off", "off", "off")
testdata <- data.frame(YEAR, GROUP, STATUS, VALUE)
我希望按年份和组进行分组,总结以获得最大值,我可以使用 dplyr 很好地做到这一点。
testdata %>%
group_by(YEAR, GROUP) %>%
summarise(max_value = max(VALUE))
但我希望输出具有分组的 YEAR 和 GROUP、max_value 以及与 max(VALUE) 对应的 STATUS。
我尝试了一些方法,但无法使其发挥作用。这很接近:
testdata %>%
group_by(YEAR, GROUP) %>%
summarise(max_value = max(VALUE),
STATUS = first(STATUS))
但是输出不正确,因为它给出的是第一个 STATIS(显然),而不是与最大 VALUE 所在行对应的 STATUS。
例如。输出行之一是 2019, A, 6,在我希望它是 2019, A, 6, off 的位置。
这是一个测试数据集,我的实际数据是一个更大的时间序列,但我遇到了同样的问题。
希望能帮到你!
library(tidyverse)
testdata |>
group_by(YEAR, GROUP) |>
slice_max(VALUE, n = 1)
# Groups: YEAR, GROUP [4]
YEAR GROUP STATUS VALUE
<dbl> <chr> <chr> <dbl>
1 2019 A off 6
2 2019 B on 5
3 2020 A on 8
4 2020 B off 7
或者:
testdata |>
slice_max(VALUE, n = 1, by = c(GROUP, YEAR))