How I can replace number in R 1 to11, 2 to 22 and 0 to 10, also -9 as NA?

             id        rs143        rs148       rs149      rs1490 
     1    02003s         -9          1          2          1    
     2    02003s         -9          0          1          2  
     3    02003s         -9          1          1          2   
     4    02003s         -9          0          1          1
     5    02003s         -9          0          1          1 

I want to replace numbers as this format:

             id        rs143        rs148       rs149      rs1490 
     1    02003s         NA          11          22          11    
     2    02003s         NA          10          11          22   
     3    02003s         NA          11          11          22
     4    02003s         NA          10          11          11 
     5    02003s         NA          10          11          11  

I tried this

      df[df==1]<-11
      df[df==2]<-22
      df[df==0]<-10 

 But this error occur:

     In [<-.factor`(`*tmp*`, thisvar, value = 22) :
     invalid factor level, NA generated



As mentioned in the comments some of the columns are class of *factor*, not *numeric*. If all SNP columns are numeric, then your existing code should work.

Try below code to convert, factor **and** numeric columns into numeric:

    # lookup for allele recoding
    lookup <- setNames(c(NA, 10, 11, 22), c(-9, 0, 1, 2))
    
    
    res <- cbind(df[, 1, drop = FALSE], 
                 data.frame(lapply(df[, -1], function(i) lookup[ as.character(i) ])))
    
    res
    #       id rs143 rs148 rs149 rs1490
    # 1 02003s    NA    11    22     11
    # 2 02003s    NA    10    11     22
    # 3 02003s    NA    11    11     22
    # 4 02003s    NA    10    11     11
    # 5 02003s    NA    10    11     11

