I have a data frame in R. One column of this data frame takes values from 1 to 6. I have another data frame that maps this column. There is some way to substitute the values
You can try
v1 <- c(4, 2, 2, 3, 4, 1, 4, 4)
LETTERS[v1]
#[1] "D" "B" "B" "C" "D" "A" "D" "D"
Suppose if your mapping dataset 2nd column is not just "LETTERS"
d1 <- data.frame(Col1=c(1,3,4,2), Col2=c('j1', 'c9', '19f', 'd18'),
stringsAsFactors=FALSE)
unname(setNames(d1[,2], d1[,1])[as.character(v1)])
#[1] "19f" "d18" "d18" "c9" "19f" "j1" "19f" "19f"
Or
d1$Col2[match(v1, d1$Col1)]
#[1] "19f" "d18" "d18" "c9" "19f" "j1" "19f" "19f"
To use this type of map/dictionary to create a new data frame column, you can also use the match method:
snape_gradebook_df<-data_frame(students=c("Harry", "Hermione", "Ron", "Neville", "Ginny", "Luna", "Draco", "Cho"),
numeric_grade=c(4,2,2,3,4,1,4,4))
grade_map<-data_frame(numbers=c(1,2,3,4), letters=c("A", "B", "C", "D"),
stringsAsFactors = FALSE)
snape_gradebook_df['letter_grade']<-grade_map$letters[match(old_list, grade_map$numbers)]
I'm not sure the advantages/disadvantages of setNames vs match - just thought I would share another possible solution.