2017-04-17 17 views
0

私は非常に奇妙で複雑な質問をしています。私はそれをどのように記述するかについてもわかりませんが、ベストを尽くします。行と列の値に基づいて計算する

私はロールコールデータを見ています。私のデータの列は、立法府のロール・コール投票です。最初の行は、ロールコールのポリシー領域です(ポリシー領域は "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 

まず、私は、彼らはR、W、またはBのようにコーディングされている場合(Gと等しくないすべての「Issと」またはポリシーエリア投票は重要ではありません調べたいです)。

第二に、私はそれらのロールコールに関するすべての議員の投票を調べたいと思います。具体的には、私は彼らが非Gロール・コールで投票を逃したかどうかを検討したいと思います(失われた投票は9としてコード化されています)。

次に、G以外のすべてのロールコールで欠落しているロールコール(9とコード化されています)に基づいて2つのスコアを作成します。評点は、立法者が(政策分野に関係なく)前回または後の投票を逃したかどうかを示している。最初のスコアは、前回のOR投票に失敗した場合です。 2番目のスコアは、ANDの後に投票を逃したところです。これらのスコアをすべてのロールコール投票(Gロールコール以外の場合)に追加したいと思います。メンバーがG以外のロールコール投票を見逃していない場合、その個々のロールコールは合計スコアに0の値を与えます。個々のロールコールを逃した(例えば、9の値を受け取った)が、前回と次のロールコール投票の両方に存在していた場合、その個々のロールコールは、それらのスコアに0の値を提供する。

例えば、上記の例では、私は(「または」V4のための理由のためにスコア2の値になるだろう3人の議員

 Or Score And Score 
Leg1 2   0 
Leg2 1   1 
Leg3 0   0 

立法1に対して次の2つのスコアを持つことになり、それら彼らは次のロールコールを見逃していました。そして、彼らは以前のロールコールを逃したV5(彼らも9点を受け取った)のために9を受け取りました。立法者2は、V4では次のスコアを逃したため、「または」スコアに対して1の値を取得します。 「And」スコアの場合、立法者2は、V5の場合、前回および後続のロールコール投票(例えば3つの9つ)の両方を失ったため、値1を受け取ることになる。最後に、レッグ3は両方のスコアでゼロの値を受け取るでしょう。なぜなら、彼らが投票を逃した間に、彼らは前の投票と次の投票の両方に投票したからです。

私の質問は以下の通りです。 "Or"スコアと "And"スコアを計算する方法はありますか?どんな助けでも大歓迎です。非常に多くの条件付き関係があることを考慮して、この問題にどのように取り組んでいくかについてはわかりません。ループが最善でしょうか?再度、私は混乱のために謝罪します。私のコメントに続いて

+0

は宿題の質問のように聞こえると私はSO上で同様の質問を見てきたと思います。最初に検索を提案してください。 –

+0

立法者2は、V5を見逃してしまったために得点を得てはならないが、V4かV6のどちらかを欠いてはならないのか?そうでなければ、これは論理論理を複雑にする。 ANDは自動的にORとしてカウントされます。 – shayaa

+0

はい、正しい議員2がORスコアを取得する必要があります。どうもありがとうございます! (ところで、これは宿題ではありません)。 – Dyllan

答えて

0

、次の操作を行い、orandの包括的になりたいならば:

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") 
+0

ありがとうございます。これは私が必要なものです! – Dyllan

+0

ようこそ@Dyllan。その答えが価値があるなら、アップヴォートは常に高く評価されます。 – shayaa

関連する問題