首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于子组和2列的值计数数

基于子组和2列的值计数数
EN

Stack Overflow用户
提问于 2019-02-17 00:09:53
回答 1查看 76关注 0票数 0

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

我正在研究立法者的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据: id是个别立法者的识别号;挣扎变量是一名成员是否有投票问题(二分法);投票表示该成员如何投票(它可以取0至9之间的任何值,它是一个范畴变量);唱名是点名号码或每次点名的id。

首先,我想把数据分成两组。这是根据999议员对1至6的投票栏是否有任何价值而作出的决定,如果他这样做了,我希望把所有唱名表决分开(及议员)划分为一个组别。对于所有剩余的唱名表决表决(或不等于1至6),我希望将所有唱名表决票(和成员)分成一个单独的组。

第二,我想把这两个从上述步骤中产生的团体( 999成员在投票变量上是否取了1比6的值)分开,即一个立法者是挣扎着去投票(斗争),还是他们没有挣扎去投票。因此,我一共有四组。

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

这里是数据的一个例子。

下面是生成该表的代码:

代码语言:javascript
运行
复制
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在唱名变量中获得介于1-6之间的值而立法者(id)挣扎的组。

B表示成员999在唱名变量中获得1-6之间值的组&立法者(id)没有挣扎。

C表示成员999没有在唱名变量中获得1-6之间的值的组&立法者(id)挣扎。

D表示成员999没有在唱名变量中接收1-6之间的值的组&立法者(id)没有挣扎。

每组中的数字值表示立法者在这四组中(A、B、C或D)之一收到7、8或9次的次数。是否有人有任何建议或潜在的代码来生成这些数据?我很感激有人能提供的任何帮助。我再次为这个复杂的问题和任何不明确的问题道歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-17 02:26:28

有趣的问题!据我所知,输出中的每个组ABCD都将满足两个条件:id = 999在1:67:9中是否有Vote,第二个条件是StruggleYES还是NO

对于每个组,第一个条件的计算结果是相同的。因此,我们首先确定每个组的第一个条件,然后将其left_join到原始的data,然后summarize它。

代码语言:javascript
运行
复制
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') ))
  • 前四行表达式是计算第一个条件(每个Vote组的999是否介于1到6之间)。
  • 我们将其left_join为原始data,并根据您的标准创建4个组。

Output

代码语言:javascript
运行
复制
     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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54728917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档