0

Given two data frames:

df1 = data.frame(letters = c("A","B","3","D","5","G"),numbers = c(1:6))
df2 = data.frame(letters = c("C","E"), numbers = c(3,5))

df1
# letters   numbers
#    A         1
#    B         2
#    3         3
#    D         4
#    5         5
#    F         6 
df2
# letters   numbers
#    C         3
#    E         5

What do I need to do that at the end i get this data frame.

finalData

# letters   numbers
#    A         1
#    B         2
#    C         3
#    D         4
#    E         5
#    F         6 

I tried so inner_join but I didnt manage to get the desired result. Please let me know which function to use! So I can take the next step. Thank you!

markus
  • 25,843
  • 5
  • 39
  • 58
1Z3173C0D3
  • 41
  • 5
  • One option using `match`: `df1$letters[match(df2$numbers, df1$letters)] <- df2$letters` But make sure you set `stringsAsFactors = FALSE` when you create your data. – markus Jan 07 '19 at 21:06

1 Answers1

0

Here is a possible solution (works with stringsAsFactors = TRUE or FALSE)

# rbind matched values in df2 with df1 (without the rows corresponding to matches)
df <- rbind(df1[!df1$letters %in% df2$numbers,],df2[df2$numbers %in% df1$letters,])
df <- df[order(df$numbers),] # order the data frame
df
#    letters numbers
# 1        A       1
# 2        B       2
# 11       C       3
# 4        D       4
# 21       E       5
# 6        F       6

with the data

df1 <- data.frame(letters = c("A","B","3","D","5","F"),numbers = c(1:6)) # changed G to F
df2 <- data.frame(letters = c("C","E"), numbers = c(3,5))    
niko
  • 5,253
  • 1
  • 12
  • 32