Я думаю, что ключевой проблемой здесь является способ, которым вы настроили фрейм данных. Не ясно, что каждый человек получает пару баллов, по одному от каждого оценщика. Поэтому первое, что нужно сделать, это добавить идентификатор для каждого человека: 50 идентификаторов в данных вашего примера.
library(tidyverse)
ds %>%
mutate(id = rep(1:50, each = 2)
Теперь мы можем использовать tidyr::spread
, чтобы создать столбец для каждого оценщика. Но числа для имен столбцов не очень хорошая идея, поэтому мы переименуем их в e1
и e2
.
ds %>%
mutate(id = rep(1:50, each = 2)) %>%
spread(evaluator, behavior_problems) %>%
rename(e1 = `1`, e2 = `2`)
Теперь у нас есть имена столбцов, которые можно указывать для ggplot
:
ds %>%
mutate(id = rep(1:50, each = 2)) %>%
spread(evaluator, behavior_problems) %>%
rename(e1 = `1`, e2 = `2`) %>%
ggplot(aes(e1, e2)) +
geom_point()
![enter image description here](https://i.stack.imgur.com/eprCL.png)
Если это выглядит как "длинный путь", то это потому, что ggplot2
лучше работает с "длинными" данными (до распространения), чем с "широкими" (после распространения). Чтобы проиллюстрировать это, вот еще один способ визуализировать разницу в баллах по отдельным лицам, которая, я думаю, работает довольно хорошо:
ds %>%
mutate(id = rep(1:50, each = 2),
evaluator = factor(evaluator)) %>%
ggplot(aes(id, behavior_problems)) +
geom_point(aes(color = evaluator)) +
geom_line(aes(group = id))
![enter image description here](https://i.stack.imgur.com/fNXrS.png)