RickGrimesOfAlexandria
RickGrimesOfAlexandria

Reputation: 103

Replace Values in Dataframe Column based on match in second data frame columns

I've seen a half dozen or so solutions to this on Stack Overflow, but, all dealing with matches within a single data frame using 'within'. I need a solution that goes across multiple dataframes:

I have values in a column in Data Frame 1

DF1$A: "1, 2, 1, 3, 2, 6, 4, 5, 8, 8, 2, 7, 4, etc."

I have a second data frame with the 'key' to these codes

DF2$A: "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"

DF2$B: "Pie, Pizza, Hamburgers, etc."

How do I change the values in DF1$A to match the values in DF2$B ?

Upvotes: 6

Views: 9791

Answers (2)

DeduciveR
DeduciveR

Reputation: 1702

You can use base merge to join by the index, and select from dplyr to subset and rename:

library(tidyverse)

DF1 <- DF1 %>% 
  merge(DF2, by = "A") %>%
  select(-A, A = B) 

Upvotes: 0

ulfelder
ulfelder

Reputation: 5335

You can do this with match as a pointer to specific positions in df2$B:

# make some toy data
set.seed(1)
df1 <- data.frame(A = sample(seq(3), 10, replace = TRUE))
df2 <- data.frame(A = seq(3), B = c("pizza", "hot dog", "hamburger"), stringsAsFactors = FALSE)

df1$B <- df2$B[match(df1$A, df2$A)]

Result:

> df1
   A         B
1  3 hamburger
2  1     pizza
3  2   hot dog
4  1     pizza
5  1     pizza
6  2   hot dog
7  1     pizza
8  2   hot dog
9  3 hamburger
10 2   hot dog

Upvotes: 12

Related Questions