Subconjunto de un dataframe basado en el contenido de otro dataframe

Tengo dos data.frames. Por ejemplo, vamos a decir que se ven así:

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

Lo que me gustaría hacer es subconjunto ‘df1’ para contener las filas cuyo primer valor de columna coincide con cualquier valor dentro de la primera columna de ‘df2’.

Ahora, lo he intentado:

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

Pero esto me dice que necesito data.frames de igual tamaño. ¿Pensamientos?

Ambos %in% y match() se pueden usar para esto. Aquí está el primero:

 > 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"]) abcdefghijklmnopqrstu vwxy 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 >