【问题标题】:Grouping three columns and then comparing the value if the fourth将三列分组,然后比较第四列的值
【发布时间】:2019-09-06 09:02:03
【问题描述】:

我正在研究 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年后)赢得了选举添加,否则为 0

【问题讨论】:

    标签: r dplyr dummy-variable


    【解决方案1】:

    我们可以arrangeST_CODEAC_NOYEARgroup_byST_CODEAC_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)))
    

    这将在每个 ST_CODEAC_NO 的第一年返回 NA,并在接下来的几年中返回 1、0。

    【讨论】:

    • 我在看这个的某种形式。但是,我无法解决我需要为上一轮选举分配 1 的事实。换句话说,与您的建议完全相反。
    • @KaustavDutta 在这种情况下,使用lead 而不是lag。将最后一行替换为mutate(previous_win = as.integer(PARTYABBRE == lead(PARTYABBRE)))
    • 我没有意识到这一点。那条信息使我免于痛苦。谢谢!
    • @KaustavDutta 很高兴能帮上忙!如果您觉得它对您有用,请随时点击投票按钮旁边的复选标记accept the answer。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多