как я могу применить функцию which.min условно - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу создать столбец в кадре данных и заполнить минимальное значение в кадре данных в столбце. Условие выполнено:

**Sample data** 
Variable value
A         10
A         20
A         30
B         5
B         60
B         70

Ожидаемый результат:

Variable value   NewColumn
A         10     min
A         20     between min to 20
A         30     between 21 to 30
B         5      min
B         60     between 50 to 60

Есть ли простой способ добиться этого?

1 Ответ

0 голосов
/ 15 ноября 2018

Вывод в вопросе кажется противоречивым, поскольку иногда нижняя граница на 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...