2016-04-22 7 views
-1

私はパネルデータを持っているとt = 2なるようにするために、T = 1のx = 0かつx = 1を持っている個人のみ維持したい:ダミー変数の値の順序を必要としない個人を削除しますか? (パネルデータ)

df <- data.frame(
    ID = c(1,1,2,2,3,3,4,4), 
    time = c(1,2,1,2,1,2,1,2), 
    x = c(0,1,0,0,1,1,1,0) 
) 
    ID time x 
1 1 1 0 
2 1 2 1 
3 2 1 0 
4 2 2 0 
5 3 1 1 
6 3 2 1 
7 4 1 1 
8 4 2 0 

は次のようになります。

ID time x 
1 1 1 0 
2 1 2 1 

これを取得しようとしましたが、作成しないでください。

+2

満足以上の行があります。あなたの状態よりもあなたの状態。 – Gopala

+0

私はそれがIDであると言うことを忘れました。したがって、同じID番号 –

+0

の範囲内でなければなりません。したがって、両方のケースを持ち、残りの部分を破棄するIDを保持したいだけですか? – Gopala

答えて

1

私は、より具体的基準は、次のようにあなたは、この使用して、ライブラリdplyrとグループ化されたフィルタリングを行うことができますID 1.満たさないケースを含めるようにサンプルデータを拡大:

df <- rbind(df, data.frame(ID = c(1, 1), time = c(2, 1), x = c(0, 1))) 
df 
    ID time x 
1 1 1 0 
2 1 2 1 
3 2 1 0 
4 2 2 0 
5 3 1 1 
6 3 2 1 
7 4 1 1 
8 4 2 0 
9 1 2 0 
10 1 1 1 

# First, get all IDs where both conditions are present 
df <- df %>% group_by(ID) %>% filter(any(time == 1 & x == 0) & any(time == 2 & x == 1)) 
df 
Source: local data frame [4 x 3] 
Groups: ID [1] 

    ID time  x 
    (dbl) (dbl) (dbl) 
1  1  1  0 
2  1  2  1 
3  1  2  0 
4  1  1  1 

# Filter within those IDs for the specific conditions 
df %>% filter((time == 1 & x == 0 | time == 2 & x == 1)) 
Source: local data frame [2 x 3] 
Groups: ID [1] 

    ID time  x 
    (dbl) (dbl) (dbl) 
1  1  1  0 
2  1  2  1 
+0

ありがとう!はい、私はシーケンスが個人内にのみ存在することを望んでいます。 id 2と3は残っていません。その人はxの正しい値を持つので、ID = 1だけです –

関連する問題