2017-02-16 11 views
1

Я пытаюсь выполнить некоторое обобщение данных с помощью R и dplyr. Мой кадр данных имеет множество строк следующего вида:Вычисление коэффициентов групп в dplyr на основе значений из других строк

color year  score 
<fctr> <int>  <int> 

У меня есть такое же количество строк в год для каждого из N различных цветов. Для каждого из них у меня есть оценка. Внутри каждого цвета (группы) я хотел бы вычислить отношение всех баллов к одному конкретному году. Например:

color year  score 
    <fctr> <int>  <int> 
1 blue 1980  43 
2 blue 1982   13 
3 red  1980   330 
4 red  1998   89 

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

color year  score ratio 
    <fctr> <int>  <int>  
1 blue 1980  43  1 
2 blue 1982   13  0.302325581 
3 red  1980   330  1 
4 red  1998   89  0.269696969 

Я знаю, как использовать mutate и summarize, но это мне не ясно, как выбрать из значения оценки для данной строки, которая соответствует определенной (в этом случае строка с 1980 годом (из которой мы гарантируем только одну)) внутри каждой группы.

Что такое чистый способ сделать это? комментарий

+3

Попробуйте 'df1%>% group_by (color)%>% mutate (ratio = score/score [1])' или если значение 'year' изменяется для каждого 'color', тогда 'mutate (ratio = score/оценка [год == 1980]) ' – akrun

+1

@akrun это отлично работает. Спасибо! – Kulluk007

+0

Нет проблем, рад помочь вам. Я предполагаю, что будут какие-то ссылки на обман. – akrun

ответ

1

akrun ответила на мой вопрос:

mutate(ratio = score/score[year==1980]) 

именно то, что мне нужно здесь.