2015-05-05 3 views
0

У меня есть очень большой кадр данных, представляющий временные ряды данных из модели агента на основе, которая выглядит следующим образом:вывода процентной частота исходов над группами в R

ABM Model Run Data

Каждой строка в этом наборе данных представляет собой один цикл модели, который может работать в течение произвольного промежутка времени и заканчиваться в одном из трех окончаний: «единство», «стабильность» или «неустойчивость».

Я строю большой график, который отображает данные временных рядов, связанные с размерами и соединениями, и я хочу отделить прогоны к завершению, так что все прогоны, заканчивающиеся в определенном конце, получают отдельный цвет на графике. Я хочу, чтобы толщина каждой линии была относительной частотой, с которой каждый вид окончания происходил в этой партии.

Для этого мне нужно добавить еще один столбец к этим данным, «count», который подсчитывает количество раз, когда определенное окончание встречается в партии прогонов, сгруппированных по измерениям и соединениям, и затем имеет этот номер появляются в каждой строке, характеризующейся этим окончанием.

Итак, скажем, от 1 до 10 - размеры == 4 и соединения == 2. Четыре из этих пробегов заканчиваются «стабильностью», двумя в «нестабильности» и двумя «единством». Я бы хотел, чтобы столбец «count» составлял 4, 2 и 2 для каждой строки в той партии данных, которая получила каждое соответствующее окончание.

Это сложный вопрос. Заранее спасибо!

+1

Это * очень * предпочтительнее обмениваться данными с 'dput' вместо скриншота. Просто 'dput (head (your_data))' и вставьте его в свой вопрос. – Gregor

+0

Еще лучше, сделайте это 10 строк, но не оставляйте столбцы, которые не имеют значения для этого вопроса: 'dput (head (your_data [, c (« run »,« dimensions »,« connections »,« end »)], 10)) ' – Gregor

+0

спасибо - я сделаю это в следующий раз. –

ответ

2

Не удается проверить без воспроизводимых данных, но с использованием dplyr что-то, как это должно работать:

library(dplyr) 
your_data %>% 
    group_by(dimensions, connections) %>% 
    mutate(runs_in_batch = n()) %>% 
    group_by(dimensions, connections, ending) %>% 
    mutate(count = n(), 
     pct_in_batch_this_ending = count/runs_in_batch) 
+0

Спасибо, Грегор! Но я не уверен, что означает% /%? –

+0

Не думаю, я это понял! Спасибо, это отлично поработало! –

+0

Он просто передает то, что приходит перед ним, как первая функция, которая приходит после него. Это из пакета 'magrittr', но его использование рекомендуется в' dplyr'. Там есть приятное введение [здесь] (http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html). – Gregor