You almost had it.
df <- data.frame(ColA = c(1, 9, 7, 6, 4),
ColB = c(2, 2, 2, 2, 2),
ColC = c(3, 1, 3, 3, 1),
ColD = c(5, 5, 5, 5, 5))
df$answer <- names(df)[apply(df, MARGIN = 1, FUN = which.min)]
df
#> ColA ColB ColC ColD answer
#> 1 1 2 3 5 ColA
#> 2 9 2 1 5 ColC
#> 3 7 2 3 5 ColB
#> 4 6 2 3 5 ColB
#> 5 4 2 1 5 ColC
Created on 2020-11-17 by the reprex package (v0.3.0)