Поскольку мы удаляем равное количество столбцов из начала и конца (общий идентификатор), наборы данных по-прежнему будут одинаковыми по размерам, поэтому можно напрямую сделать данные /
dat[paste0("rat", 1:2)] <- 1- dat[-c(1, ncol(dat))]/dat[-(1:2)]
dat <- structure(list(id = 1:3, v1 = c(115L, 47L, 70L), v2 = c(116L,
50L, 77L), v3 = c(150L, 55L, 77L)), class = "data.frame", row.names = c(NA,
-3L))