В зависимости от того, хотите ли вы оценить максимальное число «sample_data» между всеми «sample_data2» == break, включая (например, строка 1 - строка 4), или исключить (например, строка 1 - строка 3) заданный «sample_data2» == break строка, вы можете сделать что-то подобное с tidyverse
:
За исключением строк разрыва:
sample_df %>%
group_by(sample_data2) %>%
mutate(temp = ifelse(is.na(sample_data2), NA_character_, paste0(gl(length(sample_data2), 1)))) %>%
ungroup() %>%
fill(temp, .direction = "up") %>%
filter(is.na(sample_data2)) %>%
group_by(temp) %>%
summarise(res = max(sample_data))
temp res
<chr> <dbl>
1 1 3.
2 2 6.
3 3 13.
Включая строки разрыва:
sample_df %>%
group_by(sample_data2) %>%
mutate(temp = ifelse(is.na(sample_data2), NA_character_, paste0(gl(length(sample_data2), 1)))) %>%
ungroup() %>%
fill(temp, .direction = "up") %>%
group_by(temp) %>%
summarise(res = max(sample_data))
temp res
<chr> <dbl>
1 1 4.
2 2 7.
3 3 14.
Оба кода создают переменную ID, называемую "temp", используя gl()
для "sample_data2" == break, а затем заполняют строки NA этим идентификатором. Затем первый код отфильтровывает строки «sample_data2» == break и оценивает максимальные значения «sample_data» на группу, а второй оценивает максимальные значения «sample_data» на группу, включая «sample_data2» == строки разрыва.