Как правильно передать неравенство или диапазон в dplyr :: case_when - PullRequest
0 голосов
/ 03 марта 2019

Я безуспешно пытаюсь создать уровни данной переменной, используя 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 Ответ

0 голосов
/ 03 марта 2019

Попробуйте это:

new_new_mtcars <- new_mtcars %>%
  mutate(grouping = case_when(
    min(wt) <= wt & 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"
  ))
...