tidyversetidy

How to replace certain values in the dataframe using tidyverse in R?


There are some values in my dataset(df) that needs to be replaced with correct values e.g.,

Height Disease Weight>90kg
1.58 1 0
1.64 0 1
1.67 1 0
52 0 1
67 0 0

I want to replace the first three values as '158', '164' & '167'. I want to replace the next as 152 and 167 (adding 1 at the beginning).

I tried the following code but it doesn't work:

data_clean <- function(df) {
df[height==1.58] <- 158
df}
data_clean(df)

Please help!


Solution

  • Using recode you can explicitly recode the values:

    df <- mutate(df, height = recode(height, 
                                     1.58 = 158, 
                                     1.64 = 164, 
                                     1.67 = 167, 
                                     52 = 152, 
                                     67 = 167))
    

    However, this obviously is a manual process and not ideal for a case with many values that need recoding.

    Alternatively, you could do something like:

    df <- mutate(df, height = case_when(
      height < 2.5 ~ height * 100,
      height < 100 ~ height + 100
    )
    

    This would really depend on the makeup of your data but for the example given it would work. Just be careful with what your assumptions are. Could also have used is.double and 'is.integer`.