Search code examples
rloopsdplyrapplypurrr

how to add columns iteratively for recoding with semi-modified names


I would use this dataset as an example

BEZ <- c("A","A","A","A","B","B","B")
var <- c("B","B","B","B","B","B","B")
bar <- c("B","B","B","B","B","B","B")

Bez1 <- c("A","A","A","A","B","B","B")
var1 <- c("B","B","B","B","B","B","B")
bar1 <- c("B","B","B","B","B","B","B")

dat <- data.frame(BEZ, var, bar, Bez1, var1, bar1)

the tricky thing that I would like to do is use a method (loops, map(), apply(), dplyr functions, and so on) to create aside the already existing new column where based on the respective row value is converted into a number.

Excepeted result

BEZ  BEZ_num  var  var_num  bar  bar_num  Bez1  BEZ1_num    var1  var1_num     bar1   bar1_num
  A     0       B   1        B    1         A       0         B       1          B       1
  A     0       B   1        B    1         A       0         B       1          B       1
  A     0       B   1        C    2         A       0         B       1          A       0
  A     0       B   1        B    1         A       0         C       2          B       1
  B     1       B   1        B    1         B       1         C       2          C       2
  B     1       B   1        B    1         A       0         B       1          B       1
  B     1       B   1        B    1         A       0         B       1          B       1

This is more or less the idea I would like to hit. Any suggestions? Thanks


Solution

  • Using factor

    library(dplyr)
     dat %>%
       mutate(across(everything(), ~ as.integer(factor(.x))-1, .names = "{.col}_num"))
    

    -output

    BEZ var bar Bez1 var1 bar1 BEZ_num var_num bar_num Bez1_num var1_num bar1_num
    1   A   B   B    A    B    B       0       0       0        0        0        0
    2   A   B   B    A    B    B       0       0       0        0        0        0
    3   A   B   B    A    B    B       0       0       0        0        0        0
    4   A   B   B    A    B    B       0       0       0        0        0        0
    5   B   B   B    B    B    B       1       0       0        1        0        0
    6   B   B   B    B    B    B       1       0       0        1        0        0
    7   B   B   B    B    B    B       1       0       0        1        0        0