2013-04-21 11 views
1

그래서 다른 차원의 데이터 프레임이 두 개 있습니다.열 값이 다른 데이터 프레임의 열 값과 일치하지 않는 데이터 프레임에서 행을 제거하십시오 - R

Year ID Number 
2008.1 38573 1 
2008.2 24395 3 

(들 사이에서 많은 양의 데이터)

2008.4 532 4 

두번째, X2는 약 80,000이다

첫번째, X는 약 10,000 행 긴 모양처럼 행 길이 보이는 같은 :

Year ID  Number 
2008.1 38573 2 
2008.2 24395 3 

(그 사이에 많은 양의 데이터)

,536,913,632 10

기본적으로 행의 연도, ID 및 숫자 값이 첫 번째 데이터 프레임의 모든 행과 일치하지 않는 조건을 만족하는 두 번째 데이터의 행을 제거하려고합니다. 그래서 위의 예에서 Number가 일치하지 않기 때문에 두 번째 데이터 프레임에서 행 1을 제거합니다.

x2new <- x2[(x2$ID == x$ID && x2$Year==x$Year && x2$Number == x$Number),] 

을하지만 두 개의 데이터 프레임의 길이가 다르기 때문에 작동하지 않습니다 :

은 내가 시도했습니다.

나는 3 개의 조건을 모두 가지고 있지 않은 행을 제거하기 위해 double for 루프를 시도했지만, R은 단순히 많은 반복을 할 수 없습니다.

도와주세요! 감사.

+0

당신은 대신'&'의'&&'사용하기 때문에 코드의 회선이 작동하지 않는 이유는 단순한 재현 예를 – Nishanth

+1

를 제공 할 수 있습니다. R에서'? '&''를보세요. 즉, 10k * 80k 쌍의 행이있을 때 이러한 일련의 검색을 피하는 것이 가장 좋습니다. @agstudy가 제안한대로 '병합'은 아마도 당신이 찾고있는 것일 것입니다. –

답변

3

예를 들어 데이터를 사용 merge

merge(dat1,dat2) 

간단한 :

그런 다음
dat1 <- read.table(text='Year,ID,Number 
2008.1,38573,1 
2008.4,532,4 
2008.2,24395,3',header=TRUE,sep=',') 

dat2 <- read.table(text='Year,ID,Number 
2008.1,38573,2 
2008.4,532,4 
2008.2,24395,3',header=TRUE,sep=',') 

는 당신이 얻을 :

merge(dat1,dat2) 
    Year ID Number 
1 2008.2 24395  3 
2 2008.4 532  4 
+0

내 데이터 세트의 단순화 된 버전을 게시했습니다. 첫 번째 행에는 약 500 개의 열이 있고 두 번째 행에는 약 70 개의 열이 있으므로 차원이 다릅니다. 텍스트를 = ''할 수 없기 때문에 붙여 넣을 너무 많은 것입니다. 특정 열의 열 값이 일치하지 않는 경우 두 번째 데이터 집합의 특정 행을 제거 할 수있는 방법이 있습니까? 다른 데이터 세트의? – user2303557

+0

@ user2303557 여기에서'text = ...'는 재현 가능한 예제를 제공하지 않기 때문에 데이터를 읽는 것입니다. 데이터를 작성하는 것은 유물 일뿐입니다. 잊어 버려. 열 번호에 대한 귀하의 발언은 기본적으로 병합이 두 data.frames의 colnames 교차로에서 수행됩니다. – agstudy

+0

나는 데이터 프레임이 60 및 500 개의 어떤 열을 가지고 있어도 3 열만 포함했습니다.병합 함수를 지정하여 3 개의 특정 열에 일치하는 항목을 확인할 수있는 방법이 있습니까? – user2303557

0

난 당신이 모든 행을 제거 할 것을 이해 곳 없음 세 개의 열 중 하나는 첫 번째 데이터 프레임에서 일치하고 모든 행을 유지합니다. 최소한 하나의 열에 일치하는 항목이 있습니까? 그렇다면, 그냥 이렇게 :

newX2 <- x2[ x2$ID %in% x$ID | x2$Year %in% x$Year | x2$Number %in% x$Number,] 
+0

나는 3 개 모두에 경기가있는 경우에만 경기를 계속하기를 원한다는 것을 의미했는데, 그것이 불분명하면 미안합니다. 내가 가진 % % (내 지식을 기반으로) % ID, 연도 및 데이터 프레임 2의 행 x 번호 ID, 연도 및 데이터 프레임 1의 번호를 모두 일치하도록 원하는 문제입니다. 지금 당장 데이터 프레임 1의 ID, 연도 및 번호가 데이터 프레임 1에 존재하는지 확인하는 것입니다. – user2303557

+0

@ user2303557 죄송합니다. 내 잘못입니다. 여기에 5:45 AM입니다 :) :) 그리고 나서, |, |, 그리고,, &를 변경하십시오. – Michele

+0

np. 문제 해결됨! – user2303557

관련 문제