r - 根据子组和 2 列计算值的数量
问题描述
我想知道是否有人可以帮助我在 R 中生成这些数据。它相当复杂,我不知道如何开始。如果我的问题不清楚,我提前道歉。我正在尝试创建一个独特的数据集。本质上,我试图将我的数据分为四组,并根据某个列的值计算个人在组内收到某个值的次数。
我正在查看立法者之间的点名数据以及他们的投票方式。具体来说,我有四个变量的面板数据: id是个人立法者的识别号;斗争变量是成员是否有投票困难(二分法);vote表示成员如何投票(它可以取 0 到 9 之间的任何值,它是一个分类变量);和是每个点名的点名号码或 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 在点名变量中收到介于 1-6 之间的值并且立法者 ( id ) 挣扎的组。
B 表示成员 999 在点名变量中收到介于 1-6 之间的值且立法者 ( id ) 没有挣扎的组。
C 表示成员 999 未收到点名变量和立法者(id ) 挣扎的组。
D 表示成员 999 没有收到点名变量中 1-6 之间的值且立法者 ( id ) 没有挣扎的组。
每组中的数值表示立法者在四个组(A、B、C 或 D)之一中收到 7、8 或 9 的次数。有没有人有任何建议或潜在的代码来生成这些数据?我感谢有人可以提供的任何帮助。再次,我为这个复杂的问题和任何缺乏明确性表示歉意。
解决方案
有趣的问题!据我了解,您的输出中的每个组A
, B
, C
, orD
都将满足两个条件:id
= 999 是否Vote
在1:6
or7:9
中,第二个条件是是否Struggle
是YES
or 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') ))
- 前四行表达式正在评估第一个条件(每组的 1 到 6 之间是否
Vote
存在。999
Rollcall
- 我们根据您的标准
left_join
原创并创建 4 个组。data
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
推荐阅读
- javascript - 为什么表单字段 id 在提交按钮单击时填充为 JavaScript 变量?
- php - 生成具有不可打印背景的 PDF
- javascript - 我们可以一键检索给帐户的广告价格吗 - Google Adsense
- swift - SwiftUI 中的 Chat 样式的 ScrollView
- react-native - 测试 expo sdk 39 但在 expo-yarn-workspaces 上失败
- qt - 将 QLabel 连接到 QSlider 的问题
- python - Python:登录身份验证后从 URL 下载 CSV 文件
- xaml - UI 看起来在使用 xamarin.forms 的 ios 的初始加载中被裁剪
- android - Kotlin 的洪水填充
- vue.js - 没有覆盖 NODE_ENV 的 vue 构建