Вот базовое решение R путем определения пользовательской функции f
f <- Vectorize(function(l,u) {
ur <- round((u-l)/3*(1:3)+l)
lr <- c(l,ur[1:2]+1)
paste(lr,ur,sep = "-")
})
dfout <- cbind(df[1],
`colnames<-`(t(f(df$Min,df$Max)),c("Bottom","Middle","Top")))
, такой что
> dfout
ID Bottom Middle Top
1 A 30-73 74-117 118-160
2 B 12-75 76-137 138-200
3 C 35-80 81-126 127-171
4 D 16-77 78-137 138-198
DATA
df <- structure(list(ID = structure(1:4, .Label = c("A", "B", "C",
"D"), class = "factor"), Min = c(30, 12, 35, 16), Max = c(160,
200, 171, 198)), class = "data.frame", row.names = c(NA, -4L))