R 基于子组和2列计算值的数量
我想知道是否有人能帮我用R生成这些数据。这相当复杂,我不知道如何开始。如果我的问题不清楚,我提前道歉。我正在尝试创建一个唯一的数据集。本质上,我试图将数据分为四组,并根据某列的值计算一个人在一组中收到某个值的次数 我正在查看立法者的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据:id是立法者个人的身份号码;斗争变量是成员是否有投票困难(二分法);投票表示成员投票的方式(它可以采用0到9之间的任何值,并且是一个分类变量);rollcall是点名号码或每次点名的id 首先,我想把数据分成两组。此分隔将基于999(id)成员是否为投票列获取任何等于1到6的值。如果他这样做了,我希望所有点名表决(和成员)在一个类别中分开。对于所有剩余的唱名表决(或不等于1到6),我希望将所有唱名表决(和成员)分为一组 第二,我想根据个别立法者是否努力投票(斗争)或他们是否努力投票来区分从上述步骤创建的两个组(999议员是否在投票变量上取了任何等于1-6的值)。因此,我总共有四组 第三,基于投票变量,我想将每个立法者获得7、8或9(每四组)值的总次数相加。因此,我将为每个成员提供四个新变量和值 下面是一个数据示例 以下是生成该表的代码:R 基于子组和2列计算值的数量,r,count,subset,data-manipulation,R,Count,Subset,Data Manipulation,我想知道是否有人能帮我用R生成这些数据。这相当复杂,我不知道如何开始。如果我的问题不清楚,我提前道歉。我正在尝试创建一个唯一的数据集。本质上,我试图将数据分为四组,并根据某列的值计算一个人在一组中收到某个值的次数 我正在查看立法者的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据:id是立法者个人的身份号码;斗争变量是成员是否有投票困难(二分法);投票表示成员投票的方式(它可以采用0到9之间的任何值,并且是一个分类变量);rollcall是点名号码或每次点名的id 首先,我想把数据
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