2017-11-14 12 views
2

グループに属する個体を含むデータフレームがあるとしましょう。たとえば、最初の列にはID、2番目の列にはID、3番目の列にはIDグループメンバーのID。私が達成したい何ベクトルに基づいた一致R

Data <- data.frame(TICKER = rep(rep(c(1, 2, 3), each = 3), 2), 
       TIME = c(rep(2012, 9), rep(2013, 9)), 
       PEER = c(2, 500, 503, 
         1, 3, 504, 
         507, 508, 2, 
         2, 500, 503, 
         1, 3, 504, 
         507, 508, 509)) 

は、私は個人が同じグループにお互いを持っているかどうかを示す指標と4番目の列を取得することです。つまり、次の出力:

ID TIME PEER INDICATOR 
1  2012 2  1 
1  2012 500  0 
1  2012 503  0 
2  2012 1  1 
2  2012 3  1 
2  2012 504  0 
3  2012 507  0 
3  2012 508  0 
3  2012 2  1 
1  2013 2  1 
1  2013 500  0 
1  2013 503  0 
2  2013 1  1 
2  2013 3  0 [since individual 3 does not have individual 2 anymore] 
2  2013 504  0 
3  2013 507  0 
3  2013 508  0 
3  2013 509  0 

これを達成する最も簡単な方法は何ですか?

感謝:)

答えて

1

ここでは簡単の二ライナートリックです:

row_match <- apply(Data, 1, function(dr) paste0(sort(dr), collapse="_")) 

Data$INDICATOR <- as.numeric(duplicated(row_match) | duplicated(row_match, fromLast = T)) 

> Data 
    TICKER TIME PEER INDICATOR 
1  1 2012 2   1 
2  1 2012 500   0 
3  1 2012 503   0 
4  2 2012 1   1 
5  2 2012 3   1 
6  2 2012 504   0 
7  3 2012 507   0 
8  3 2012 508   0 
9  3 2012 2   1 
10  1 2013 2   1 
11  1 2013 500   0 
12  1 2013 503   0 
13  2 2013 1   1 
14  2 2013 3   0 
15  2 2013 504   0 
16  3 2013 507   0 
17  3 2013 508   0 
18  3 2013 509   0 
+0

Thxを、答えとして選択して自由に感じるが;) – thc

関連する問題