У меня есть такая ситуация, когда мне нужна другая сводка функция в зависимости от условия.Например, используя радужную оболочку, скажем, по какой-то причине я хотел получить сумму ширины лепестка, если у вида был setosa, в противном случае я хотел бы получить среднее значение ширины лепестка.
Наивно я написал это с помощью case_when, который не работает:
iris <- tibble::as_tibble(iris)
iris %>%
group_by(Species) %>%
summarise(pwz = case_when(
Species == "setosa" ~ sum(Petal.Width, na.rm = TRUE),
TRUE ~ mean(Petal.Width, na.rm = TRUE)))
Ошибка в summarise_impl (.data, dots): столбец pwz
должен иметь длину 1 (итоговое значение), а не 50
В конце концов я нашел что-то вроде этого, суммируя, используя каждый метод, а затем в мутировавшем наборе, который я действительно хотел:
iris %>%
group_by(Species) %>%
summarise(pws = sum(Petal.Width, na.rm = TRUE),
pwm = mean(Petal.Width, na.rm = TRUE)) %>%
mutate(pwz = case_when(
Species == "setosa" ~ pws,
TRUE ~ pwm)) %>%
select(-pws, -pwm)
Но это кажется более чем немногоНеловко создавать все эти обобщенные значения и выбирать только одно в конце, особенно когда мой настоящий case_when намного сложнее.Могу ли я не использовать case_when внутри суммирования?У меня неправильный синтаксис?Любая помощь приветствуется!
Редактировать: Полагаю, я должен был указать, что у меня есть несколько условий / функций (просто предположим, что у меня есть, в зависимости от переменной, некоторые из них, которые требуют среднего, суммы, максимума, минимума или другого резюме).