检查表1中的id1是否等于表2中的id2,如果是,则以id2的“顺序”将表1中的内容添加到表2中(不改变顺序)

问题描述 投票:0回答:1

表1:

id1    fname      lname         by     bm   bd

 362   FRANK     MUELLER        1967    9   27
 55    MARTIN    SCHWARZ        1967    2   17
 116   HERBERT   ZIMMERMANN     1961    11  6
 326   HANS      SCHMITT        1945    8   14
 96    UWE         NA           2000    7   5

table2

id2

55
96
116
116
96

如果表中的数字id1等于表2中的数字id2,则将与表1(fname,lname,by,bm,bd)匹配的列及其内容与table2相匹配。NOTE:将与table1匹配的列添加到table2时,应以id2的顺序(55,96,116,226,326,...)

当我这样做时,我使用了这个功能:合并(tabl2,table1,by =“ id2”,sort = FALSE)然后我得到了这个:

id2   fname      lname        by     bm   bd

55   MARTIN    SCHWARZ        1967    2   17
96   UWE         NA           2000    7   5
96   UWE         NA           2000    7   5
116  HERBERT   ZIMMERMANN     1961    11  6
116  HERBERT   ZIMMERMANN     1961    11  6
 .    .
 .    .

我以从较小的数字到较大的数字的顺序得到它,但我想要的是在不更改顺序的情况下将其作为table2中id2的列来获得。

r equals orders
1个回答
0
投票

您可以尝试(使用base R):

df3 <- merge(df2, df1, by.x="id2", by.y="id1")

df3[match(df2$id2, df3$id2),]

为您提供

    id2   fname      lname   by bm bd
1    55  MARTIN    SCHWARZ 1967  2 17
2    96     UWE       <NA> 2000  7  5
4   116 HERBERT ZIMMERMANN 1961 11  6
4.1 116 HERBERT ZIMMERMANN 1961 11  6
2.1  96     UWE       <NA> 2000  7  5

使用dplyr

left_join(df2, df1, by=c("id2" = "id1"))

产量

# A tibble: 5 x 6
    id2 fname   lname         by    bm    bd
  <dbl> <chr>   <chr>      <dbl> <dbl> <dbl>
1    55 MARTIN  SCHWARZ     1967     2    17
2    96 UWE     NA          2000     7     5
3   116 HERBERT ZIMMERMANN  1961    11     6
4   116 HERBERT ZIMMERMANN  1961    11     6
5    96 UWE     NA          2000     7     5
© www.soinside.com 2019 - 2024. All rights reserved.