代码之家  ›  专栏  ›  技术社区  ›  Dyllan

根据子组和2列计算值的数量

  •  0
  • Dyllan  · 技术社区  · 5 年前

    我正在查看立法委员的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据: 是个别立法委员的识别号码 投票 指示成员投票的方式(它可以采用0到9之间的任何值,并且是一个分类变量);以及 是点名编号或每个点名的id。

    首先,我想把数据分成两组。这种分离将基于成员999( )为投票列取1到6的任何值。如果他这样做,我希望所有的唱名表决(和成员)在一个类别分开。对于所有剩余的唱名表决(或不等于1到6),我希望所有唱名表决(和成员)在一个单独的组中。

    )或者他们没有努力投票。因此,我总共有四组。

    第三,基于投票变量,我想把每个立法者收到数值7、8或9(每四组)的总次数加起来。因此,每个成员都有四个新的变量和值

    下面是一个数据示例。

    enter image description here

    下面是生成该表的代码:

    id=c(999,1,2, 999,1,2,999,1,2,999,1,2)
    Struggle=c("NO", "YES", "NO", "NO", "NO", "YES", "NO", "NO", "YES", "YES", "YES", "YES")
    Vote=c(1,9,1,9,0,1,2,9,9,9,9,1)
    Rollcall=c(1,1,1,2,2,2,3,3,3,4,4,4)
    data=cbind("id", "Struggle", "Vote", "Rollcall")
    

    enter image description here

    A表示成员999在其中接收到1-6之间的值的组 点名 身份证件

    B表示成员999在其中接收到1-6之间的值的组 身份证件 )没有挣扎。

    C表示成员999未在其中接收到1-6之间的值的组 可变因素和立法者( 身份证件

    D表示成员999未在中接收到1-6之间的值的组 点名 身份证件 )没有挣扎。

    每一组中的数值表示立法者在四组(a、B、C或D)中获得7、8或9的次数。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Sai SL    5 年前

    A B , C ,或 D 在你的输出中会满足两个条件:是否 id Vote 在里面 1:6 7:9 Struggle YES NO

    对于每个组,第一个条件的计算结果是相同的。所以,我们首先确定每组的第一个条件,然后 left_join 原版的 data 然后 summarize

    library(tidyverse)
    
    data <- data.frame(id, Struggle, Vote, Rollcall)
    
    data %>% 
      filter(id==999) %>% 
      mutate(cond = ifelse(Vote %in% 1:6, TRUE, FALSE)) %>% 
      select(Rollcall, cond) %>% 
      left_join(data, by='Rollcall') %>% 
      group_by(id) %>% 
      summarize(A = sum( (cond == TRUE) & (Struggle == 'YES') ),
                B = sum( (cond == TRUE) & (Struggle == 'NO') ),
                C = sum( (cond == FALSE) & (Struggle == 'YES') ),
                D = sum( (cond == FALSE) & (Struggle == 'NO') ))
    
    • 属于 999 在1到6之间 Rollcall 组。
    • 我们 原来的那个 并根据您的标准创建4个组。

    Output :

         id     A     B     C     D
      <dbl> <int> <int> <int> <int>
    1     1     1     1     1     1
    2     2     1     1     2     0
    3   999     0     2     1     1