I need to recode values over multiple columns of a data frame based on another table.
I have to recode the values of multiple columns of a data table using a side table. The values correspond to geographic identifiers that I must replace with place names. So I decided to do a loop but what works outside the loop doesn't work anymore . I can't use mutate in for loop.
My real data contains 274 columns with 38 columns to recode. This columns have many different names (they aren't call places")
my main dataset :
id <- c(1, 2, 3)
departure <- c(1, 2, NA)
arrival <- c(3, 1, 2)
transit <- c(NA,NA,1)
dataset <- data.frame(id, departure, arrival, transit)
The other table :
geo_id <- c(1, 2, 3)
place_name <- c("Paris", "Nantes", "London")
geocode <- data.frame(geo_id, place_name)
My loop :
var <- c("departure", "arrival", "transit") #the columns that should by recode (must be a vector with my real data)
for (i in var) {
print(i)
dataset <- dataset %>%
mutate(i = geocode$place_name[match(i, geocode$geo_id)])
}
mutate create a new column call i
! How to avoid this ?
mutate_at
? This looks like what it's designed for – camille