我想知道是否有人能帮助我在R中生成这些数据,这是相当复杂的,我不知道如何开始。如果我的问题不清楚,我提前道歉。我正在尝试创建一个独特的数据集。本质上,我试图将我的数据划分为四个组,并根据某个列的值计算一个人在一个组中接收某个值的次数。
我正在研究立法者的点名数据以及他们是如何投票的。具体来说,我有四个变量的面板数据: id是个别立法者的识别号;挣扎变量是一名成员是否有投票问题(二分法);投票表示该成员如何投票(它可以取0至9之间的任何值,它是一个范畴变量);唱名是点名号码或每次点名的id。
首先,我想把数据分成两组。这是根据999议员对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没有在唱名变量中获得1-6之间的值的组&立法者(id)挣扎。
D表示成员999没有在唱名变量中接收1-6之间的值的组&立法者(id)没有挣扎。
每组中的数字值表示立法者在这四组中(A、B、C或D)之一收到7、8或9次的次数。是否有人有任何建议或潜在的代码来生成这些数据?我很感激有人能提供的任何帮助。我再次为这个复杂的问题和任何不明确的问题道歉。
发布于 2019-02-17 02:26:28
有趣的问题!据我所知,输出中的每个组A
、B
、C
或D
都将满足两个条件:id
= 999在1:6
或7:9
中是否有Vote
,第二个条件是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') ))
Vote
组的999
是否介于1到6之间)。left_join
为原始data
,并根据您的标准创建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
https://stackoverflow.com/questions/54728917
复制相似问题