0

I have two csv files and I want to duplicate the same keyword across all groups when their cross reference (file 1) matches a code list (file 2). I know this is possible in R but don't know how. Any help is appreciated.

File 1

 Group      Cross Reference
CTY23-A     A11
CTY23-C     A11
CTY23-B     A11
CTY23-D     A11

File 2

Code      keyword
A11       AV440
A11       AV660
A11       AV760
A11       AV240

output:

Group        keyword
CTY23-A      AV440
CTY23-A      AV660
CTY23-A      AV760
CTY23-A      AV240
CTY23-C      AV440
CTY23-C      AV660
CTY23-C      AV760
CTY23-C      AV240
CTY23-B      AV240
CTY23-B      AV440
CTY23-B      AV660
CTY23-B      AV760
CTY23-D      AV240
CTY23-D      AV440
CTY23-D      AV660
CTY23-D      AV760
smci
  • 32,567
  • 20
  • 113
  • 146
jsingh
  • 199
  • 4
  • 12

2 Answers2

0
merge(dat1,dat2,by.x="Cross.Reference",by.y="Code")
   Cross.Reference   Group keyword
1              A11 CTY23-A   AV440
2              A11 CTY23-A   AV660
3              A11 CTY23-A   AV760
4              A11 CTY23-A   AV240
5              A11 CTY23-C   AV440
6              A11 CTY23-C   AV660
7              A11 CTY23-C   AV760
8              A11 CTY23-C   AV240
9              A11 CTY23-B   AV440
10             A11 CTY23-B   AV660
11             A11 CTY23-B   AV760
12             A11 CTY23-B   AV240
13             A11 CTY23-D   AV440
14             A11 CTY23-D   AV660
15             A11 CTY23-D   AV760
16             A11 CTY23-D   AV240
Onyambu
  • 67,392
  • 3
  • 24
  • 53
0

With tidyverse, we do a full_join and select the required columns

library(dplyr)
full_join(df1, df2, by = c(CrossReference = "Code")) %>% 
        select(-CrossReference)
#    Group keyword
#1  CTY23-A   AV440
#2  CTY23-A   AV660
#3  CTY23-A   AV760
#4  CTY23-A   AV240
#5  CTY23-C   AV440
#6  CTY23-C   AV660
#7  CTY23-C   AV760
#8  CTY23-C   AV240
#9  CTY23-B   AV440
#10 CTY23-B   AV660
#11 CTY23-B   AV760
#12 CTY23-B   AV240
#13 CTY23-D   AV440
#14 CTY23-D   AV660
#15 CTY23-D   AV760
#16 CTY23-D   AV240
akrun
  • 874,273
  • 37
  • 540
  • 662