-1

I have two DFs with a different number of rows which share some of the same row names:

     DF1                       DF2 
                                   Col
Name1                    Name1      A  
Name3                    Name2      B
Name4                    Name3      C
Name7                    Name4      D 
                         Name5      E
                         Name6      F
                         Name7      G

but I would like to make a column in DF1, which has a smaller number of rows from the Col in DF2 based upon matching row names shared by both DFs:

    DF1                       DF2 
        Col                         Col
Name1    A                Name1      A  
Name3    C                Name2      B
Name4    D                Name3      C
Name7    G                Name4      D 
                          Name5      E
                          Name6      F
                          Name7      G
amwalker
  • 345
  • 1
  • 8
  • 17

2 Answers2

2

This will solve what you want

DF1 = data.frame(Name = c(1,3,4,7))
DF2 = data.frame(Name = 1:7,Col = letters[1:7])
DF1$Col = DF2$Col[match(DF1$Name,DF2$Name)]
Alejandro Andrade
  • 2,196
  • 21
  • 40
0

The tidyverse way:

DF1 <- data.frame(
    Name = c(1, 3, 4, 7))
DF2 <- data.frame(
    Name = seq(1:7),
    Col = LETTERS[1:7]);
DF1 %>% left_join(DF2);
#   Name Col
#1    1   A
#2    3   C
#3    4   D
#4    7   G
Maurits Evers
  • 49,617
  • 4
  • 47
  • 68