如何从两个数据帧中找到类似字符串的索引

时间:2016-06-29 09:31:42

标签: r indexing

我有两个df,我想知道df2中与df1匹配的那些字符串的索引

df1 <- structure(list(Ids = structure(c(2L, 4L, 3L, 5L, 1L, 6L), .Label = c("                                            P30561,P53762", 
"                                           P41182,P56524", "                                           P41182,Q8WUI4", 
"                                           P41182,Q9UQL6", "                              Q92793,Q09472,Q9Y6Q9,Q92831", 
"                       Q15021,Q9BPX3,Q15003,O95347,Q9NTJ3"), class = "factor")), .Names = "Ids", class = "data.frame", row.names = c(NA, 
-6L))

我的df2如下所示

df2 <-structure(list(V1 = structure(c(1L, 2L, 5L, 4L, 3L), .Label = c("P41182", 
"Q15003", "Q9BHX3", "Q9BPXH", "Q9NTJ3"), class = "factor")), .Names = "V1", class = "data.frame", row.names = c(NA, 
-5L))

在这种情况下,我应该有1,2和3和6之类的索引,因为这些行中df2中的字符串与df1中的字符串相似

1 个答案:

答案 0 :(得分:2)

如果vector的模式grep长度很大,那么我们可以遍历模式并grep

 unique(unlist(lapply(df2$V1, grep, x = df1$Ids)))

并使用OP的原始数据集

 unique(unlist(lapply(df2$dftNew.rn, grep, x = df1$V1)))
 #[1]  68  80 168 201 214 215 229 288 289 386 388   7 525   4  30 234 362 405 406 129 206   6  51 125 126 127 136 137 254 546 468
 #[32] 298 438 264 487  12  26  47  86  90  91  92 120 121 122 143 152 153 154 155 245 248 249 440 157 158 162 164 165 167 169 170
 #[63] 244 401 113 114 115  24  28  29  31 218 219  97 272 456 457  82 161 270 378 383  88   2   5  17 128 130 134 135 138 140 398
 #[94] 435 241 441 369 373 389 230 231  27 213  95 101 102 104 105 106 262 519 202 204 358 359 360 361 363 364 366 407 408 409 410
#[125] 203 110 199 200 243 187 320 321 322 396 233 323 333   1 271 277 433 455 109  16 184 185 186 543 545 265  19 469 470 471 473
#[156] 472   8   9 107 111 116 175 276 196 430 212  89 547 573 560 305 306  21  85 147 151 222 224 225 226 246 403 404 568 439 286
#[187] 542 544  49  14 370 402 452 513 484  56  57 518 297 371 374 335 336 337 338 339  48  58 190 530 531 532 533 534 535 537 538
#[218] 501  40 242 287 446  81 269 400 432 309 467 488 499 504 506 507 512 548 179 372 428 511 561 569 291 258  55  67 217 293 376
#[249] 189 235 447 448 482 500 267 263 310 572 207 208 211 295 325  60 284 285 477 478  52  53  54  59  73 172 205 209 210 220 395
#[280] 481 304 334 510 352 351 353 411 420 343  13  61  62  69  70  71 240 282 416 443 462 465 466 480 483 498  84 475  22  79 444
#[311] 145 156 324 384 497  18 348  83  98 290 509  20  50 357 350 421 183 377 492 493 307 308 434 522 523 524 529 536 355 188 303
#[342] 341 344 346 347 349 453 551 340 479  63  65 474 331 177 427 180 299 300 423 424 425 426 450  74 489  87 173 274 275 550 260
#[373] 485 567 495 345 413 442 278 279 490 566 259 393 394 273 422 476 502 503 516 539 521 558 146  32  99 505 508 281 171 329 280
#[404] 328 540 541 191 192 193 194 365 367 368 496 515 354 459 133 253 227 228  77  78 166  64 302 549 517 247 292 195 330 431 385
#[435] 387 571 251 268 382 486 100  23 311 559 564 565 463 283  10  11  38  39  41  42  43  44  76 123 124 197 198 221 237 238 239
#[466] 250 255 257 313 314 316 317 318 319 375 379 412 464 454 574 552  45  46  75  96 144 252 315 380 381 390 391 494 327 108 296
#[497] 491 526 527 414 148 149   3 356 445 181 182  15  93  94 117 118 119 174 176 178 256 326 436  66 216 528 554 555 556 557 562
#[528] 563 570 575 417 418 419  72 261 132 397 437 449 451 458 312 415 139 141 163 514 392 301 520 112 266 142 160  33  34  35  36
#[559]  37 150 294 461 429 223 236  25 399 332 460 131 159 342 103 232 553

dim(df1)
#[1] 575   1