#r #dplyr #tidyverse #tidyr
#r #dplyr #tidyverse #tidyr
Вопрос:
Я безуспешно пытаюсь создать уровни данной переменной, используя dplyr::case_when с интервалами.
#подготовка образца данных
mtmodel <- lm(mpg ~ wt, data = mtcars)
mtcars$Low <- predict(mtmodel, newdata = mtcars, interval = "confidence")[,2]
mtcars$High <- predict(mtmodel, newdata = mtcars, interval = "confidence")[,3]
mtcars$Mean <- predict(mtmodel, newdata = mtcars, interval = "confidence")[,1]
new_mtcars<-gather(mtcars, "Variable", "value", Low:Mean)
#создание групп с использованием dplyr::case_when
#does not work
library(tidyverse)
new_new_mtcars<-new_mtcars %>%
mutate(grouping = case_when (
min(new_mtcars$wt) <= new_mtcars$wt<= mean(new_mtcars$wt) 0.99 ~ "group1",
new_mtcars$wt >= max(new_mtcars$wt) - 0.5 ~ "group2"))
#R возвращает это сообщение об ошибке и выполняет работу не так, как предполагалось
Error: unexpected '<=' in:
" mutate(grouping = case_when (
min(new_mtcars$wt) <= new_mtcars$wt<="
Error: unexpected ')' in "
new_mtcars$wt >= max(new_mtcars$wt) - 0.5 ~ "group2")"
Ответ №1:
Попробуйте это:
new_new_mtcars <- new_mtcars %>%
mutate(grouping = case_when(
min(wt) <= wt amp; wt <= mean(wt) 0.99 ~ "group1",
wt >= max(wt) - 0.5 ~ "group2"
))
Вам не нужно ссылаться на свой фрейм данных внутри канала после первой ссылки. Кроме того, min(wt) <= wt <= mean(wt) 0.99
всегда будет выдавать ошибку, поскольку вам всегда нужно иметь две переменные для каждого оператора, поэтому вам нужно указать wt <= mean(wt) 0.99
в качестве другого условия.
Исключением было бы, если бы вы использовали что-то вроде between
, где вы сначала указываете переменную, которая находится между ними, а затем нижнюю и верхнюю границы, вот так:
new_new_mtcars <- new_mtcars %>%
mutate(grouping = case_when(
between(wt, min(wt), mean(wt) 0.99) ~ "group1",
wt >= max(wt) - 0.5 ~ "group2"
))
Комментарии:
1. Отлично, @arg0naut! Решение с помощью between лучше, потому что оно работает не только с моими выборочными данными, но и с моими фактическими данными. Спасибо за это очень полезное решение.
2. Всегда пожалуйста! Обычно это должно работать в обоих направлениях, но рад, что хотя бы одно помогло!