R 基于子组和2列计算值的数量

R 基于子组和2列计算值的数量,r,count,subset,data-manipulation,R,Count,Subset,Data Manipulation,我想知道是否有人能帮我用R生成这些数据。这相当复杂,我不知道如何开始。如果我的问题不清楚,我提前道歉。我正在尝试创建一个唯一的数据集。本质上,我试图将数据分为四组,并根据某列的值计算一个人在一组中收到某个值的次数 我正在查看立法者的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据:id是立法者个人的身份号码;斗争变量是成员是否有投票困难(二分法);投票表示成员投票的方式(它可以采用0到9之间的任何值,并且是一个分类变量);rollcall是点名号码或每次点名的id 首先,我想把数据

我想知道是否有人能帮我用R生成这些数据。这相当复杂,我不知道如何开始。如果我的问题不清楚,我提前道歉。我正在尝试创建一个唯一的数据集。本质上,我试图将数据分为四组,并根据某列的值计算一个人在一组中收到某个值的次数

我正在查看立法者的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据:id是立法者个人的身份号码;斗争变量是成员是否有投票困难(二分法);投票表示成员投票的方式(它可以采用0到9之间的任何值,并且是一个分类变量);rollcall是点名号码或每次点名的id

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

第二,我想根据个别立法者是否努力投票(斗争)或他们是否努力投票来区分从上述步骤创建的两个组(999议员是否在投票变量上取了任何等于1-6的值)。因此,我总共有四组

第三,基于投票变量,我想将每个立法者获得7、8或9(每四组)值的总次数相加。因此,我将为每个成员提供四个新变量和值

下面是一个数据示例

以下是生成该表的代码:

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")
我希望它看起来如下所示:

A表示成员999在其中接收到rollcall变量中的值介于1-6和立法者(id)之间的组

B表示成员999在rollcall变量中接收到介于1-6之间的值且立法者(id)没有挣扎的组

C表示成员999在rollcall变量中未收到介于1-6之间的值的组&立法者(id)

D表示成员999在rollcall变量中未收到介于1-6之间的值的组&立法者(id)没有挣扎

每组中的数值表示立法者在四组(a、B、C或D)中的一组中收到7、8或9的次数。
有人有任何建议或潜在的代码来生成这些数据吗?我感谢任何人能提供的帮助。我再次为这个复杂的问题和任何不清晰的地方道歉。

有趣的问题!据我所知,您的输出中的每组
A
B
C
D
将满足两个条件:id=999是否在
1:6
7:9
中有
投票权
,第二个条件是
斗争
YES
还是
NO

对于每个组,第一个条件的计算结果相同。因此,我们首先确定每个组的第一个条件,然后将其左加入原始数据,然后进行汇总

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') ))

谢谢你的帮助!我认为代码非常接近,但它产生了属于每个类别(成员)的唱名表决总数。我很想知道一名成员的唱名表决票中有多少票的票数是7、8或9(在4个唱名类别中的每一个)。你对如何做最后一部分有什么建议吗?再次感谢你,这真的很接近。迪伦,我不确定我是否理解。在我看来,对于成员(
id
s)1和2:他们个人的
Vote
值根本不被考虑,因为初始(步骤1)排序的标准是
id
=999的
Vote
值。如果您想知道每个成员的rollcall投票数(考虑到他们自己的
投票
值),那么输出表的分布将不同。你能澄清一下吗?我知道了。我有一个编码错误!非常感谢。
     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