Вот вариант, использующий recode_factor
df %>%
mutate_at(
vars(starts_with("s")),
~recode_factor(.x, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH"))
# name s1 s2 s3
#1 A NO HIGH SHIGH
#2 B SLOW LOW NO
#3 C NO NO NO
#4 D LOW NO HIGH
или альтернативно
library(tidyverse)
df %>%
gather(k, v, -name) %>%
mutate(v = recode_factor(v, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH")) %>%
spread(k, v)
# name s1 s2 s3
#1 A NO HIGH SHIGH
#2 B SLOW LOW NO
#3 C NO NO NO
#4 D LOW NO HIGH
Пример данных
df <- read.table(text =
"name s1 s2 s3
A 0 1 2
B -2 -1 0
C 0 0 0
D -1 0 1
", header = T)