Вывод в вопросе кажется противоречивым, поскольку иногда нижняя граница на 10 меньше верхней, а в другие времена на 9 меньше.Мы определили, что это на 9 меньше, а если min на 9 или 10 ниже верхней границы, напишите min
вместо нижней.
Теперь определите функцию, которая вводит вектор x
и классифицирует его, используя ave
, чтобы применить его отдельно к каждой группе.Пакеты не используются.
categorize <- function(x) {
upper <- 10 * ceiling(x / 10)
lower <- ifelse(upper-9 == min(x) | upper-10 == min(x), "min", upper-9)
ifelse(x == min(x), "min", paste("between", lower, "to", upper))
}
transform(DF, New = ave(value, Variable, FUN = categorize))
предоставление:
Variable value New
1 A 10 min
2 A 20 between min to 20
3 A 30 between 21 to 30
4 B 5 min
5 B 60 between 51 to 60
6 B 70 between 61 to 70
Примечание
Используемый вход DF
в воспроизводимом виде:
Lines <- "
Variable value
A 10
A 20
A 30
B 5
B 60
B 70"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)