2017-11-14 2 views
2

그룹의 일부인 개인을 포함하는 데이터 프레임이 있다고 가정 해 봅시다. 예를 들어 첫 번째 열에 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)) 

내가 달성하고 싶은 것은 개인이 동일한 그룹에 서로 있는지를 나타내는 지표가있는 네 번째 열을 얻는 것입니다.

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

들으, 답변으로 선택 주시기를) – thc