Создайте линейный график, сравнивая медианы значений до и после двух групп.

У меня есть кадр данных с 2 условиями и 2 временными точками в каждом условии (до и после). Я хочу создать линейный график, показывающий значения до и после MEDIAN из столбца sc из группы субъектов на обоих условиях. Я также хотел бы, чтобы была линия, соединяющая значения до и после каждого условия. т.е. Pre ------ Post для конд. № 1 и Pre ----- Post для конд. № 2.

Данные:

id    cond    time    sc
1      1       0      400
2      1       0      370
1      1       1      300
2      1       1      302
1      2       0      402
2      2       0      380
1      2       1      220
2      2       1      203

Это всего лишь пример данных. В моем наборе данных есть 11 субъектов (id 1:11) для каждого состояния в каждый момент времени. Это лучший код, который у меня есть:

ggplot(data = df, aes(x = time, y = sc, group = cond, color = factor(cond))) +
geom_line() +
geom_point() +
facet_wrap(~cond) +
ylab("Switch Cost")

Прямо сейчас этот код дает мне все точки из каждого условия (cond), а не только одну точку, показывающую медианные значения. Сегодня я искал в Интернете несколько часов, но не могу найти пример, похожий на то, что я пытаюсь создать.


person Colin    schedule 12.05.2015    source источник
comment
Какой язык программирования или инструмент вы используете? что ты уже испробовал? С какими проблемами вы столкнулись?   -  person Dijkgraaf    schedule 13.05.2015
comment
Просто добавил эти точки. Извините за упущение.   -  person Colin    schedule 13.05.2015
comment
Как правило, вам будет лучше, если вы манипулируете своими данными (т. Е. Вычисляете медианы до и после по группам), а затем рисуете их. Попытка сделать и то и другое одновременно иногда работает, но обычно это сложный способ сделать что-то. Есть много вопросов о том, как рассчитать групповую статистику (среднее значение, медиана, что угодно).   -  person Gregor Thomas    schedule 14.05.2015
comment
Очень верно Грегор. Я очень, очень новичок в R и в компьютерном программировании в целом, поэтому я пытаюсь узнать как можно больше об этом языке. Я не был уверен, что проще в данном случае, поэтому я решил спросить сообщество, которое знает! Я начинаю понимать, что большую часть времени подготовительная работа составляет 99% успеха!!   -  person Colin    schedule 14.05.2015


Ответы (2)


Как это?

d1 <- "id    cond    time    sc
1      1       0      400
2      1       0      370
1      1       1      300
2      1       1      302
1      2       0      402
2      2       0      380
1      2       1      220
2      2       1      203"
library("data.table")
d1 <- data.table(read.table(text=d1, header = TRUE))
d1[, "median" := median(sc), by=list(cond, time)]
library("ggplot2")
ggplot(d1, aes(x=time, y=median, color=factor(cond))) +
    geom_line() +
    geom_point()

давая:

введите здесь описание изображения

Я считаю, что data.table — это самый простой подход к этому типу задач «группировать по»/«суммировать», но есть и много других.

Кроме того, будьте осторожны, называя вещи df, так как это перезаписывает stats::df().

person dardisco    schedule 13.05.2015

В vanilla R вы бы использовали aggregate для тех же функций, что и решение @dardisco data.tables.

d1 <- ... as above ...
d2 <- read.table(text=d1, header=T)
d3 <- aggregate(sc ~ time + cond, d2, median)
require(ggplot2)
ggplot(d3) + geom_line(aes(x=time, y=sc, color=factor(cond))
person user295691    schedule 13.05.2015