2010-08-10 6 views
12

두 개의 data.frames가 있습니다. 예 술의 경우의 그들은 다음과 같이 가정 해 봅시다 : 내가하고 싶은 무엇다른 데이터 프레임의 내용을 기반으로 데이터 프레임 서브 세트

df1 <- data.frame(x=rep(letters[1:26], 16)) 
df2 <- data.frame(y=letters[1:4]) 

은 첫 번째 열 값 'DF2'의 첫 번째 열 내의 값과 일치하는 행을 포함하는 부분 집합 'DF1'입니다.

지금, 나는 시도했다 :

subset(df1, df1$x == df2$y) 

그러나 이것은 내가 동일한 크기 data.frames이 필요하다는 것을 알려줍니다. 생각?

답변

14

%in%match() 모두이 용도로 사용할 수 있습니다. 다음은 이전입니다 :

> which(df1$x %in% df2$y) 
[1] 1 2 3 4 27 28 29 30 53 54 55 56 79 80 81 82 105 
[18] 106 107 108 131 132 133 134 157 158 159 160 183 184 185 186 209 210 
[35] 211 212 235 236 237 238 261 262 263 264 287 288 289 290 313 314 315 
[52] 316 339 340 341 342 365 366 367 368 391 392 393 394 
> 
> 
> table(df1[ which(df1$x %in% df2$y), "x"]) 

a b c d e f g h i j k l m n o p q r s t u v w x y 
16 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
z 
0 
> 
+1

df1 [(df1 $ x % % df2 $ y), "x"] <- thanks! –

+2

당신은 boolean들의 벡터로 직접 색인 할 수있는 것처럼'which'를 드롭 할 수 있습니다. 그래서'df1 [df1 $ x % in % df2 $ y, "x"]'는 더 짧습니다. 때로는 정확한 중간 결과를 얻을 수있는 지수를 원하기 때문에'which()'를 좋아합니다. –

+1

일치하는 대신 df1을 df2보다 어떻게 나누겠습니까? – chimpsarehungry

관련 문제