Я решил это так:
library(DescTools)
library(modeest)
library(tibble)
df1 = tibble(x = c(1,2,3,4),
y = c(2,3,2,3),
z = c(3,4,4,2),
clossest_1 = c("x","y","z")[apply(data.frame(x,y,z),1,function(x){which(x == Closest(x,0))})],
a = c(4,1,2,3),
clossest_2 = c(mlv(clossest_1),"a")[apply(data.frame(get(mlv(clossest_1)),a),1,function(x){which(x == Closest(x,0))})],
b = c(3,2,1,2),
clossest_3 = c(mlv(clossest_2),"b")[apply(data.frame(get(mlv(clossest_2)),b),1,function(x){which(x == Closest(x,0))})])
df1
# A tibble: 4 x 8
x y z clossest_1 a clossest_2 b clossest_3
<dbl> <dbl> <dbl> <chr> <dbl> <chr> <dbl> <chr>
1 1 2 3 x 4 x 3 b
2 2 3 4 x 1 a 2 a
3 3 2 4 y 2 a 1 b
4 4 3 2 z 3 a 2 b