После группировки по 'group', либо rank
'значения' проверяют, что sort
ed 'n' tail
элементы %in%
rank
ed для создания логических vector
library(tidyverse)
test %>%
group_by(group) %>%
mutate(marker = dense_rank(values),
marker = marker %in% tail(sort(marker), 2))
Или напрямую использовать order
, %in%
на tail
test %>%
group_by(group) %>%
mutate(marker = values %in% tail(values[order(values)], 2))
или
test %>%
group_by(group) %>%
mutate(marker = dense_rank(values) > n()-2)
Или это можно сделать в одной строке с data.table
library(data.table)
setDT(test)[order(values), marker := values %in% tail(values, 2), group]
Или другой вариант после группировки по 'group', получить top_n
строк (n
- указано как 2, wt
как «значения»), right_join
с исходным набором данных после создания маркера 'столбец' ИСТИНЫ, а затем replace
элементов NA
с FALSE
test %>%
group_by(group) %>%
top_n(2, values) %>%
mutate(marker = TRUE) %>%
right_join(test) %>%
mutate(marker = replace_na(marker, FALSE))