Assign new values for the column in r

49 views Asked by At

I have a column with values: "Adenocarcinoma", "Large-cell carcinoma","Other lung cancer","Small-cell carcinoma","Squamous-cell carcinoma", something like:

> head(covars$newtype[1:5])

[1] Large-cell carcinoma Other lung cancer   
[3] <NA>                 Adenocarcinoma      
[5] Adenocarcinoma 

I want to change the value to "Ade", Large","Other","Small","Squ" respectively. I have tried several methods and currently plan to fix it by write multiple ifelse. But is there any more efficient way to fix it? Thanks in advance!

2

There are 2 answers

0
Tim Biegeleisen On

We can try using case_when from the dplyr package:

covar$abbrev <- case_when(
    covars$newtype == "Large-cell carcinoma" ~ "Large",
    covars$newtype == "Other lung cancer" ~ "Other",
    covars$newtype == "Adenocarcinoma" ~ "Ade",
    TRUE ~ NA
)

You may add additional terms to the above to cover other data not shown.

0
stefan On

Another approach to this kind of problem would be to make use of named vector which serves as a lookup table:

labels <- c("Adenocarcinoma" = "Ade", 
            "Large-cell carcinoma" = "Large",
            "Other lung cancer" = "Other",
            "Small-cell carcinoma" = "Small",
            "Squamous-cell carcinoma" = "Squ")

set.seed(42)

covars <- data.frame(newtype = c(sample(names(labels), 20, rep = TRUE), NA))

# Option 1
covars$newtype1 <- labels[covars$newtype]
# Option 2: Using dplyr::recode which allows for labelling missing values
covars$newtype2 <- dplyr::recode(covars$newtype, !!!labels, .missing = "Other")

covars
#>                    newtype newtype1 newtype2
#> 1           Adenocarcinoma      Ade      Ade
#> 2  Squamous-cell carcinoma      Squ      Squ
#> 3           Adenocarcinoma      Ade      Ade
#> 4           Adenocarcinoma      Ade      Ade
#> 5     Large-cell carcinoma    Large    Large
#> 6     Small-cell carcinoma    Small    Small
#> 7     Large-cell carcinoma    Large    Large
#> 8     Large-cell carcinoma    Large    Large
#> 9           Adenocarcinoma      Ade      Ade
#> 10    Small-cell carcinoma    Small    Small
#> 11          Adenocarcinoma      Ade      Ade
#> 12 Squamous-cell carcinoma      Squ      Squ
#> 13    Small-cell carcinoma    Small    Small
#> 14    Large-cell carcinoma    Large    Large
#> 15    Large-cell carcinoma    Large    Large
#> 16       Other lung cancer    Other    Other
#> 17          Adenocarcinoma      Ade      Ade
#> 18          Adenocarcinoma      Ade      Ade
#> 19       Other lung cancer    Other    Other
#> 20    Small-cell carcinoma    Small    Small
#> 21                    <NA>     <NA>    Other