У меня есть фреймворк частот видов. Я рисую график численности с течением времени и хочу обозначить наиболее распространенные виды. У меня есть фреймворк со следующими пятью столбцами - дата, вид, частота, сайт, лечение. В настоящее время я делаю что-то вроде:
df %>%
mutate(majorSpp = ifelse(frequency > 0.4, as.character(species), "")) %>%
ggplot(aes(x = date, y = frequency, colour = species, group = species)) +
geom_line() +
facet_grid(type ~ treatment)
geom_label_repel(aes(label=majorSpp))
Однако этот подход означает, что если вид имеет частоту> 0,4 в несколько дат, линия помечается в каждой из нескольких точек, а не один раз. Что мне нужно, так это присвоить название вида majorSpp только для той точки, где частота этого вида самая высокая за все даты, когда он был измерен. Но я не могу понять, как встроить этот logi c в функцию mutate.
Я открыт для других решений маркировки, таких как directlabel, если это легко сделать из коробки в некоторых другой пакет.
EDIT:
Пример данных:
df <- data.frame(date = c(01-02-2020, 01-02-2020, 04-04-2020, 04-04-2020),
species = c("cat", "dog", "cat", "dog"),
frequency = c(0.1, 0.5, 0.6, 0.5),
site = c('a', 'a', 'a', 'a'),
treatment = c(1, 1, 1, 1))
Если я создаю метку для любой частоты выше 0,4, я получаю две метки создан для "собаки". Причина, по которой я хочу это сделать, заключается в том, что у меня около 50 видов, но большинство из них большую часть времени имеют нулевую частоту. Поэтому использование чего-то вроде цвета и легенды бесполезно.
Частичное решение:
df %>%
mutate(majorSpp = ifelse(frequency > 0.4, as.character(species), "")) -> temp
temp$majorSpp[duplicated(temp$majorSpp)] <- NA
temp %>%
ggplot ...
С этим есть две проблемы: если вы фасетите дополнительные столбцы, тогда будет отображаться только каждый majorSpp один раз, по всему графику, тогда как в идеале он должен отображаться один раз в каждом аспекте, где он имеет частоту выше 0,4. Во-вторых, что не очень важно, это нарушает хороший поток в трубе.
Я приложил изображение графика, созданного с помощью этого частичного решения ниже: введите описание изображения здесь