Вы можете 1) преобразовать ваши данные в более длинный формат, чтобы все ваши значения были в одном столбце и категориальном столбце, содержащем A, B, ... 2) Затем вы можете использовать функцию cut
для генерации интервала в вашем столбце, содержащем значения и количество для каждого интервала каждой группы:
library(tidyr)
library(dplyr)
df %>% pivot_longer(everything(), names_to = "Var", values_to = "Val") %>%
mutate(intervals = cut(Val, breaks = c(0, 0.2, 0.4,0.6,0.8,1.0))) %>%
group_by(Var, intervals) %>% count()
# A tibble: 25 x 3
# Groups: Var, intervals [25]
Var intervals n
<chr> <fct> <int>
1 A (0,0.2] 18
2 A (0.2,0.4] 19
3 A (0.4,0.6] 16
4 A (0.6,0.8] 24
5 A (0.8,1] 23
6 B (0,0.2] 17
7 B (0.2,0.4] 25
8 B (0.4,0.6] 18
9 B (0.6,0.8] 22
10 B (0.8,1] 18
# … with 15 more rows
Вы можете использовать предыдущий рабочий процесс и добавить его функцию построения графика следующим образом:
library(tidyr)
library(dplyr)
library(ggplot2)
df %>% pivot_longer(everything(), names_to = "Var", values_to = "Val") %>%
mutate(intervals = cut(Val, breaks = c(0, 0.2, 0.4,0.6,0.8,1.0))) %>%
ggplot(aes(x = intervals,fill = Var)) +
geom_bar()
Выглядит ли то, что вы ожидаете?
Данные
df <- data.table(A = sample(1:100,100, replace = TRUE)/100,
B = sample(1:100,100, replace = TRUE)/100,
C = sample(1:100,100, replace = TRUE)/100,
D = sample(1:100,100, replace = TRUE)/100,
E = sample(1:100,100, replace = TRUE)/100)