2013-04-20 5 views
3

하나의 데이터 프레임 열의 값을 두 번째 데이터 프레임 열의 값과 일치 시키려고합니다. 까다로운 부분은 두 번째 데이터 프레임의 하위 집합 (일치하는 두 번째 데이터 프레임의 고유 한 열로 지정됨)을 사용하여 일치 작업을 수행하려고합니다. 이는 데이터 프레임 간의 일치를 기반으로 부분 집합을 시도하는 일반적으로 게시 된 문제와 다릅니다.한 데이터 프레임의 열과 다른 데이터 프레임의 열 하위 집합과의 일치 값

내 문제는 반대입니다. 하위 집합을 기반으로 데이터 프레임을 일치시키고 싶습니다. 구체적으로 말하자면, 두 번째 데이터 프레임의 열의 하위 집합을 첫 번째 데이터 프레임의 전체 열과 일치시키고 첫 번째 데이터 프레임에 각 열에 대해 일치 여부가 표시되는 새 열을 만들고 싶습니다. 부분 집합.

이러한 하위 집합은 다양한 수의 행을 가질 수 있습니다. 두 더미 데이터 프레임 이하 ...

DF1 <- data.frame(number=1:10) 

DF2 <- data.frame(category = rep(c("A","B","C"), c(5,7,3)), 
        number = sample(10, size=15, replace=T)) 

... 사용 목적은 DF2$number의 값 DF1$number 매치 값 여부를 표시 세 개의 새로운 열 (DF1$A, DF1$BDF$C)을 생성하는 것 DF2$category의 각 부분 집합에 대해 이상적으로이 새로운 열의 행은 일치하는 경우 '1'을 표시하고 그렇지 않은 경우 '0'을 표시합니다. 아래의 더미 데이터를 사용하면 12 열 4 행 (DF1$number, DF1$A, DF1$BDF$C)을 갖는 DF1으로 끝납니다.

실제 두 번째 데이터 프레임에는 많은 수의 범주가 있으므로이 작업을 수행하는 데 필요한 작업이 무엇이든 개별적으로 입력하지 않아도된다는 점에 유의하십시오. 나는 그것이 의미가 있기를 바랍니다! 미안 당신이 제공 할 수있는 어떤 도움을 주셔서 감사합니다.

답변

2

이 작동합니다 :

sapply(split(DF2$number, DF2$category), function(x) DF1$number %in% x + 0) 

     A B C 
[1,] 0 0 1 
[2,] 1 1 0 
[3,] 1 1 1 
[4,] 0 1 0 
[5,] 0 0 1 
[6,] 0 1 0 
[7,] 1 1 0 
[8,] 1 0 0 
[9,] 1 0 0 
[10,] 0 1 0 

당신은 같은 DF1이 다시 추가 할 수 있습니다

data.frame(
    DF1, 
    sapply(split(DF2$number, DF2$category), function(x) DF1$number %in% x + 0) 
     ) 

    number A B C 
1  1 0 0 1 
2  2 1 1 0 
3  3 1 1 1 
4  4 0 1 0 
5  5 0 0 1 
6  6 0 1 0 
7  7 1 1 0 
8  8 1 0 0 
9  9 1 0 0 
10  10 0 1 0 
+0

네, 완벽하게 작동합니다. 매우 감사합니다! Andy에게 원래 게시물의 선명도를 향상시키는 편집에 감사드립니다. – user2093526

+0

@ user2093526 - 아무런 문제가 없으니 도움이 됨 -이 질문에 답하면 위쪽/아래쪽 화살표 옆에있는 "체크 표시"를 눌러이를 알려주십시오. – thelatemail

+0

대신에 _tapply_를 사용할 수 있습니다.'tapply (DF2 $ number, DF2 $ category, function (x) DF1 $ number % in % x + 0)' –

관련 문제