Мы gather
столбцы 's', 'b' в формате 'long', а затем делаем unite
library(tidyverse)
gather(df1, key, tags, s:b) %>%
unite(n, n, key)
# n tags
#1 2_s aa
#2 3_s bb
#3 5_s cc
#4 2_b TRUE
#5 3_b FALSE
#6 5_b TRUE
данные
df1 <- structure(list(n = c(2L, 3L, 5L), s = c("aa", "bb", "cc"), b = c(TRUE,
FALSE, TRUE)), class = "data.frame", row.names = c("1", "2",
"3"))