Группировка трех столбцов, а затем сравнение значения, если четвертый

Я работаю над данными о выборах за 2008–2017 годы. Я в некоторой степени продолжил анализ. Однако я задаю следующий вопрос.

Мне нужно определить, победила ли конкретная партия на выборах в определенном округе, если она победила в предыдущем туре выборов.

ST_CODE, AC_NO и YEAR (код штата, номер избирательного округа и год) однозначно определяют наблюдение. Четвертый столбец - это название партии, победившей в данном году.

ST_CODE YEAR  AC_NO PARTYABBRE
 S15 2008    21        IND
 S15 2008    22        NCP
 S15 2008    23        INC
 S15 2008    24        INC
 S15 2008    25        UDP
 S15 2008    26        UDP
 S15 2008    27        INC
 S15 2008    28        IND
 S15 2008    29        INC
 S15 2008    30        UDP
 S15 2008    31        INC
 S15 2008    32        INC
 S15 2008    33       HPDP
 S15 2008    34       HPDP
 S15 2008    35        INC
 S15 2008    36        INC
 S15 2008    38        NCP
 S15 2008    39        NCP
 S15 2008    40        NCP
 S15 2008    41        INC

Было показано, что часть набора данных дает представление. Год продолжается до 2017

Итак, если партия A выиграла выборы в 2008 году с определенными ST_CODE и AC_NO, я хотел бы знать, выиграли ли они выборы в 2013 году (5 лет спустя). Если это так, то следует добавить фиктивную переменную 1, в противном случае 0


person Kaustav Dutta    schedule 06.09.2019    source источник


Ответы (1)


Мы можем arrange данные по ST_CODE, AC_NO и YEAR, group_by ST_CODE и AC_NO и использовать lag для сравнения значений текущего года с предыдущим.

library(dplyr)
df %>%
  arrange(ST_CODE, AC_NO, YEAR) %>%
  group_by(ST_CODE, AC_NO) %>%
  mutate(previous_win = as.integer(PARTYABBRE == lag(PARTYABBRE)))

Это вернет NA для первого года в каждом ST_CODE и AC_NO и вернет 1, 0 для следующих лет.

person Ronak Shah    schedule 06.09.2019
comment
Я смотрел на это в какой-то форме. Однако я не могу обойти стороной тот факт, что мне нужно присвоить 1 баллу предыдущему туру выборов. Другими словами, прямо противоположно тому, что вы предложили. - person Kaustav Dutta; 06.09.2019
comment
@KaustavDutta В этом случае используйте lead вместо lag. Заменить последнюю строку на mutate(previous_win = as.integer(PARTYABBRE == lead(PARTYABBRE))) - person Ronak Shah; 06.09.2019
comment
Я не знал об этом. И эта информация избавила меня от агонии. Спасибо! - person Kaustav Dutta; 06.09.2019
comment
@KaustavDutta Рад, что помог! Не стесняйтесь принять ответ, нажав на галочку рядом с кнопкой голосования, если вы считаете, что это было полезно для вас. :-) - person Ronak Shah; 06.09.2019