2014-02-17 8 views
2

두 개의 큰 데이터 프레임이 있습니다. df1에는 두 개의 관심 항목이 있으며 (다른 항목들과 비교하면) A1의 종 이름 목록과 A2의 세 문자 영역 목록이 있습니다. 각 행의 값이 모두 열을 여러 번 반복 될 수 있도록 독립적으로 기록하고, 많은 행 (~ 900 만)가있다 :두 열의 값이 두 번째 데이터 프레임의 값과 일치 할 때 데이터 프레임 서브 세트

A1   A2 
species A  AFG 
species B  THA 
species B  LOP  
species C  THA 

제 2 데이터 프레임 (DF2) 본질적으로 모든 영역 목록 내가하고 싶은 것은 스탠드

B1   B2 
species A AFG 
species A FLO 
species B LOP 
species B PLA 
species C THA 

입니다 : 각 값 B1을 위해, B2에서 다른 값을 가진 행의 수, 각있을 것입니다 그래서 종 내에서 발생해야하는 R을 사용하여 각 종에 대해 B2 (df2)에 나열된 값으로 A2에 주어진 값을 유도하십시오. 따라서 df1의 각 행에 대해 A1의 값이 B1과 같으면 A2는 B2와 동일합니다 (A1 == B1 & A2 == B2이면) 행을 유지하십시오. 따라서 위의 예에서 행 2는 df1에서 삭제됩니다.

나는 해봤 (행이 삭제되지) 다음하지만 성공 %의 DF2의 $의 B2에서 %의 DF2의 $의 B1의

X < -df1 [DF1의 $의 A1 %의 & DF1 $의 A2의 % ,]

의견이 있으십니까? match 함수가 더 적절합니까?

이것은 스택 오버플로에 대해 묻는 질문 중 첫 번째 질문입니다. 사과하지 말고 사과하십시오. 문제를 개선하는 방법에 대한 의견을 환영합니다.

건배!

답변

4

merge을 사용하면이 작업을 수행 할 수 있습니다. 올바른 by.xby.y 인수를 지정해야합니다. 다음은이를 수행하는 방법의 예입니다.

# your data 
df1 <- read.table(text="A1   A2 
species_A  AFG 
species_B  THA 
species_B  LOP  
species_C  THA", header=TRUE) 

df2 <- read.table(text="B1   B2 
species_A AFG 
species_A FLO 
species_B LOP 
species_B PLA 
species_C THA", header=TRUE) 

# merging data.frames 
merge(df1, df2[,c("B1", "B2")], by.x=c("A1", "A2"), by.y=c("B1", "B2")) 
+0

완벽하게 일한 감사의 그림자! 나는 병합을 사용할 생각이 없었다. 건배 – kim1801

관련 문제