У меня возникли трудности с созданием новой функции для заданного набора условий.

Взяв набор данных «радужная оболочка» в качестве воспроизводимого примера, я хотел бы найти максимальную длину лепестка для каждого вида и создать новый столбец, а затем назначить термин «самая высокая_длина» везде, где была определена самая высокая - я хочу отобразить это только на строка, в которой это применимо.

Я упускаю что-то очевидное для других, но не могу восполнить этот пробел самостоятельно. Очень приветствовал бы любые указатели.

Код, который я пробовал, приведен ниже:

iris%>% mutate(high_spec = case_when(distinct(Species) & max(Petal.Length) ~ 'high_length'))

Я получаю следующую ошибку:

Ошибка: проблема со столбцом mutate() high_spec. ℹ high_spec = case_when(distinct(Species) & max(Petal.Length) ~ "high_length"). x нет применимого метода для "отличного", примененного к объекту класса "фактор"

Я пробовал изменить вид на вектор персонажа, но это тоже не сработало.

Благодарность

r
0
En_JK7 26 Ноя 2021 в 15:31
Я не уверен, что вы пытаетесь сделать. LHS case_when должен быть логическим выражением. max возвращает максимальное значение . distinct возвращает объект data.frame (или похожий на data.frame). Можете ли вы включить ожидаемый результат?
 – 
Maurits Evers
26 Ноя 2021 в 15:46
Я не уверен насчет цели. Это помогает: iris %>% group_by(Species) %>% mutate(high_spec = ifelse(Petal.Length == max(Petal.Length),'high_length',NA))?
 – 
MonJeanJean
26 Ноя 2021 в 15:47
Спасибо вам обоим, готово! Я пытался использовать неправильную методологию
 – 
En_JK7
26 Ноя 2021 в 17:13

1 ответ

Лучший ответ

Следуя моему комментарию выше, я предполагаю, что вам нужно что-то вроде этого?

iris %>%
    group_by(Species) %>%
    mutate(high_spec = if_else(
        Petal.Length == max(Petal.Length), "high_length", "")) %>%
    ungroup()     

Здесь нет необходимости в case_when. Вместо этого используйте group_by для выполнения операции на Species.

Если у вас есть несколько условий, case_when может иметь смысл; но в этом случае я рекомендую взглянуть на примеры, приведенные в ?case_when. Также всегда полезно использовать case_when, чтобы запечатлеть условия провала.

3
Maurits Evers 26 Ноя 2021 в 15:48