根据行和列值进行计算
我有一个非常奇怪而复杂的问题,我甚至不知道如何描述它,但我会尽我所能。根据行和列值进行计算
我正在查看分卷数据。我的数据栏是立法机构的个人唱名表决票。第一行是唱名策略区域(政策区域编码为“R”,“G”,“W”和“B”)投票,其余所有行都表示个人立法者以及他们如何投票唱名表决。编码为9的观察表明缺少一名立法委员。值1表示立法者投赞成票,值2表示他们投不赞成。
我想检查唱名表决的一个子集,并确定立法者是否在战略上错过了选票。具体而言,我正在探讨立法者是否投票赞成以前的唱名表决或随后的唱名表决。举例来说,我有以下数据:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
Issu R G G W R G R B R G
Leg1 1 9 1 9 9 1 2 1 1 2
Leg2 9 2 1 9 9 9 1 2 1 2
Leg3 1 1 1 1 9 2 1 9 1 2
首先,我要检查所有的“国际空间站”或政策领域票是不等于G(如果它们被编码为R,W或B不要紧)。
第二,我想检查所有个人立法者对这些唱名表决的投票。具体而言,我想检查他们是否错过了对非G唱名表决的投票(再次,缺少投票编码为9)。
接下来,我想创建两个分数,基于所有非G滚动呼叫的丢失呼叫(编码为9)。评分表明立法者是否也错过了之前或之后的投票(不管政策领域如何)。第一个分数是如果他们错过了之前或之后的投票。第二个分数是他们在之前和之后错过投票的地方。我想为所有唱名表决增加这些分数(对于非G唱名表决)。如果一个会员没有错过非G的唱名表决,那么该个人唱名会为他们的总分赋予一个0的值。如果他们错过了个人唱名呼叫(例如,他们收到了9的值),但是对于之前和之后的唱名表决都存在,那么该单独唱名将对他们的分数贡献值0。
例如,在上面的例子中,我将有以下两个分数为三个立法者
Or Score And Score
Leg1 2 0
Leg2 1 1
Leg3 0 0
立委1将得到的2值的“或”得分因为V4(它们因为他们错过了接下来的点名,而V5(他们也收到了9)因此错过了之前的点名。立法者2的“或”分值为1,因为V4他们错过了以下分数。对于“And”分数,立法者2的价值为1,因为V5他们错过了之前和之后的唱名表决(例如三个9)。最后,第3回合的得分将为零,因为他们错过了投票,他们投票赞成之前和之后的投票。
我的问题是以下内容,R中有计算“Or”分数还是“And”分数的方法?任何帮助将不胜感激。考虑到有这么多的条件关系,我不知道如何解决这个问题。一个循环是最好的?再次,我对这种混乱表示歉意。
按照我的意见,如果你想or
是包容性的and
,请执行下列操作:
library(reshape2)
library(dplyr)
dat <- data.frame(vote = c(1:10), t(dat))
dat %>%
melt(measure.vars = paste0("Leg",1:3)) %>%
rename(issue = Issu, legislator = variable, result = value) %>%
filter(issue != "G") %>%
group_by(legislator) %>%
summarize(or = sum(result == 9 &
(lag(result,1) == 9 | lead(result == 9)),
na.rm = T),
and = sum(result == 9 &
lag(result,1) == 9 &
lead(result,1) == 9,
na.rm = T))
如果你想,你在你的问题表达 则应更换or
变量在NAND逻辑所述summarize
函数 以下:
or = sum(result == 9 &
(lag(result,1) == 9 | lead(result == 9)) &
!(result == 9 &
lag(result,1) == 9 &
lead(result,1) == 9)
第二代码段的输出将是
# A tibble: 3 × 3
legislator or and
<fctr> <int> <int>
1 Leg1 2 0
2 Leg2 1 1
3 Leg3 0 0
您的数据:(请张贴的dput
下一次输出)
dat <- read.table(text = " V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
Issu R G G W R G R B R G
Leg1 1 9 1 9 9 1 2 1 1 2
Leg2 9 2 1 9 9 9 1 2 1 2
Leg3 1 1 1 1 9 2 1 9 1 2")
听起来像是一门功课的问题,我想我已经看到了类似的问题对SO。建议您先搜索。 –
立法者2不应该因为他错过了V5而获得OR得分,但是也错过了V4或V6?否则,这会使布尔逻辑复杂化。 AND应自动计为OR。 – shayaa
是的,你是正确的立法者2应该得到OR分数。非常感谢! (顺便说一下,不,这不是作业)。 – Dyllan