Для этого потребуется группа фиктивных данных по энзимам и этичности, чтобы суммировать и получить среднее значение столбца «значение», а затем составить график. В geom_col position = "dodge" может помочь создать "сгруппированные" столбцы, аordin_flip перевернет оси X и Y.
library(tidyverse)
#dummy data
data <- tibble(participant = 1:30,
ethnicity = sample(c("e1", "e2"), 30, replace = T),
value = sample(-10:10, 30, replace = T),
enzyme = c(rep("enzyme1", 10), rep("enzyme2", 10), rep("enzyme3", 10)))
#get mean value of 'value'
data2 <- data %>%
group_by(enzyme, ethnicity) %>%
summarize(value = mean(value))
ggplot()+
geom_col(data = data2, aes(x = enzyme,
y = value,
fill = ethnicity),
position = "dodge")+
geom_hline(aes(yintercept = 0))+
coord_flip()+
theme_linedraw()
![enter image description here](https://i.stack.imgur.com/gbn9h.png)
Кроме того, если ваши данные содержат значения фермента в 3 отдельных столбцах, вы должны преобразовать данные в длинный формат, используя pivot_longer чтобы упростить прорисовку:
data_wide <- tibble(ethnicity = c("ethnicity1", "ethnicity2"),
enzyme1 = c(-1, -2),
enzyme2 = c(0, 0),
enzyme3 = c(1, 2))
# A tibble: 2 x 4
ethnicity enzyme1 enzyme2 enzyme3
<chr> <dbl> <dbl> <dbl>
1 ethnicity1 -1 0 1
2 ethnicity2 -2 0 2
#transform to long
data_long <- data_wide %>%
pivot_longer(starts_with("enzyme"), "enzyme")
# A tibble: 6 x 3
ethnicity enzyme value
<chr> <chr> <dbl>
1 ethnicity1 enzyme1 -1
2 ethnicity1 enzyme2 0
3 ethnicity1 enzyme3 1
4 ethnicity2 enzyme1 -2
5 ethnicity2 enzyme2 0
6 ethnicity2 enzyme3 2