2011-11-06 6 views
0

이 코드로 얼마 동안 고민하고 있습니다 ... 길이가"EID "인 고유 ID를 가진이 벡터가 있습니다. 내 데이터 프레임 중 하나에서 추출한 821 (스케이트). 그것은 다음과 같습니다R의 행 데이터 프레임을 "특정 변수가있는 경우"조건부로 삭제하면 "

> head(skate$EID) 
[1] "896-19" "895-8" "899-1" "899-5" "899-8" "895-7" 
T5 급의 $의 EID 중 하나가 스케이트 $의 EID의 (중복) 같은 경우 내가 다른 dataframe (T5)에 전체 행을 제거하려는

.

나는 다음과 같이 내 모든 일치 EID의 T5 내 '중복'dataframe을 얻을 수있었습니다 :

> xx<-skate$EID 
> t5[match(xx,t5[,26]), ]#gives me a dataframe of all matching EID in skate$EID 
     record.t trip set month stratum NAFO unit.area time dur.set distance 
8948   5 896 19 11  221 2J  N12 908  15  8 
8849   5 895 8 10  766 3O  R36 1650  16  8 
9289   5 899 1 12  743 3L  V26 2052  15  8 
9299   5 899 5 12  746 3L  W27 1129  14  7 

어디 T5 [26] T5의 $의 EID 컬럼에 해당합니다. 간단하다고 확신하지만, 지금 내 t5 데이터 프레임에서이 모든 것을 제거하는 방법을 모르겠습니다! 도움말은 대단히 감사하겠습니다! 감사합니다.

답변

4

이렇게하는 방법에는 여러 가지가 있습니다. 벡터 B가 아닌 벡터 A의 요소를 테스트하려면 !, R의 논리 부정 연산자 (?"!" 참조)와 %in% (?%in% 참조)의 조합을 사용할 수 있습니다. 그런 다음 테스트 결과를 사용하여 보관할 행을 나타냅니다.

# Create two example data.frames 
skate <- data.frame(EID = c("896-19", "895-8", "899-1", "899-5"), 
        score = 1:4) 
t5 <- data.frame(EID = c("896-19", "camel", "899-1", "goat", "899-1"), 
       score = 105:101) 

# Method 1 
t5[!t5$EID %in% skate$EID, ] 

# Method 2 (using the very handy subset() function) 
subset(t5, !EID %in% skate$EID) 
+0

Aaaah so easy :) 감사합니다. – GodinA

+0

조쉬 (Josh)는 예의입니다. 그러나 질문에 답이 나면 반드시 답을 수락하기 위해 체크 표시를 클릭해야합니다. 그것은 평판을 얻는 데 도움이되며, 답변을 표시 한 답변에 단정하고 청결한 사이트를 유지합니다 (10 배 빠름). –

+0

거래를 마쳤습니다. 고마워요! – GodinA

관련 문제