Home > front end >  How to replace all values in a column with another value?
How to replace all values in a column with another value?

Time:05-05

Suppose I have a data frame df with two columns:

id category 
A  1
B  4
C  3
D  1

I want to replace the numbers in category with the following: 1 = "A", 2 = "B", 3 = "C", 4 = "D".

I.e. the output should be

id category 
A  A
B  D
C  C
D  A

Does anyone know how to do this?

CodePudding user response:

Here I propose three methods to achieve your goal.

Base R

If you have a vector of values for conversion, you can use match to find the index of the vector to replace the category column.

vec <- c("1" = "A", "2" = "B", "3" = "C", "4" = "D")

df$category <- vec[match(df$category, names(vec))]

dplyr

Use a case_when statement to match the values in category, and assign new strings to it.

library(dplyr)

df %>% mutate(category = case_when(category == 1 ~ "A",
                                   category == 2 ~ "B",
                                   category == 3 ~ "C",
                                   category == 4 ~ "D",
                                   TRUE ~ NA_character_))

left_join from dplyr

Or if you have a dataframe with two columns specifying values for conversion, you can left_join them. Here, the dataframe for conversion is created by enframe.

left_join(df, enframe(vec), by = c("category" = "name")) %>% select(-value)

Output


  id category
1  A        A
2  B        D
3  C        C
4  D        A

Data

df <- structure(list(id = c("A", "B", "C", "D"), category = c("A", 
"D", "C", "A")), row.names = c(NA, -4L), class = "data.frame")

CodePudding user response:

A possible solution:

library(tidyverse)

df %>% 
  mutate(category = LETTERS[category])

#>   id category
#> 1  A        A
#> 2  B        D
#> 3  C        C
#> 4  D        A
  • Related