case_when () errati c поведение - PullRequest
       28

case_when () errati c поведение

0 голосов
/ 19 января 2020

Я пытаюсь запустить case_when внутри mutate и получить следующие ошибки:

Error in eval_tidy(pair$lhs, env = default_env)

Или

Error: unexpected symbol in:
    "        )
    df"

Или

> modelo == "Onix (2013)" ~ "CHEVROLET Onix (2013)",
Error: unexpected ',' in "modelo == "Onix (2013)" ~ "CHEVROLET Onix (2013)","
>         modelo == "Chevrolet Cruze (2013)" ~ "CHEVROLET Cruze (2013)",
Error: unexpected ',' in "        modelo == "Chevrolet Cruze (2013)" ~ "CHEVROLET Cruze (2013)","
>         TRUE ~ modelo)) %>%
Error: unexpected ')' in "        TRUE ~ modelo)"
>     dplyr::mutate(modelo_alternativo = dplyr::case_when(
+ 

Мой код следующий:

df %>% 
    dplyr::mutate(modelo = dplyr::case_when(
        modelo == "Onix (2013)" ~ "CHEVROLET Onix (2013)",
        modelo == "Chevrolet Cruze (2013)" ~ "CHEVROLET Cruze (2013)",
        TRUE ~ modelo)) %>%
    dplyr::mutate(modelo_alternativo = dplyr::case_when(
        modelo_alternativo == "Chevrolet Onix (2013)" ~ "CHEVROLET Onix (2013)",
        modelo_alternativo == "Chevrolet Cruze (2013)" ~ "CHEVROLET Cruze (2013)",
        modelo_alternativo == "Chevrolet Prisma (2013)" ~ "CHEVROLET Prisma (2013)",
        TRUE ~ modelo_alternativo))

И иногда, когда я изменяю его на это, он работает нормально:

df %>% 
    dplyr::mutate(modelo = dplyr::case_when(
        modelo == "Onix (2013)" ~ "CHEVROLET Onix (2013)",
        modelo == "Chevrolet Cruze (2013)" ~ "CHEVROLET Cruze (2013)",
        TRUE ~ modelo)
    ) %>%
    dplyr::mutate(modelo_alternativo = dplyr::case_when(
        modelo_alternativo == "Chevrolet Onix (2013)" ~ "CHEVROLET Onix (2013)",
        modelo_alternativo == "Chevrolet Cruze (2013)" ~ "CHEVROLET Cruze (2013)",
        modelo_alternativo == "Chevrolet Prisma (2013)" ~ "CHEVROLET Prisma (2013)",
        TRUE ~ modelo_alternativo)
    )

Я проверял синтаксис, как 1000 раз, классы столбцов в порядке, и прочитайте ответ о проблемах case_when (). Мне нужно, чтобы это работало стабильно и действительно, что бы кодировать эти замены без риска застрять.

Есть ли у вас какие-либо подсказки о том, что здесь происходит?

Пакеты, которые я загружаю:

library(lubridate)
library(tidyverse)
library(foreign)
library(here)
library(dplyr)

Данные для представ:

df <- structure(list(modelo = c("CHEVROLET Sonic (2012)", "CHEVROLET Sonic (2012)", 
                          "CHEVROLET S10 (2012)", "CHEVROLET Sonic (2012)", "CHEVROLET Classic (2010)", 
                          "CHEVROLET Sonic (2012)", "CHEVROLET S10 (2012)", "CHEVROLET S10 (2012)", 
                          "CHEVROLET S10 (2012)", "Chevrolet Prisma (2013)", "Chevrolet Prisma (2013)", 
                          "Chevrolet Prisma (2013)", "Chevrolet Prisma (2013)", "Chevrolet Prisma (2013)", 
                          "Chevrolet Prisma (2013)", "Chevrolet Prisma (2013)", "Chevrolet Prisma (2013)", 
                          "Chevrolet Prisma (2013)", "CHEVROLET S10 (2012)", "Onix (2013)"
), modelo_alternativo = c("VOLKSWAGEN Suran (2015)", "TOYOTA Corolla (2014)", 
                          "TOYOTA Hilux (ARG 2012)", "TOYOTA Corolla (2014)", "VOLKSWAGEN Gol Trend (2012)", 
                          "RENAULT Sandero Stepway (2015)", "FORD Ranger (2012)", "RENAULT FLUENCE (2015)", 
                          "FORD Ranger (2012)", "CHEVROLET Agile (ARG 2009)", "Toyota Etios", 
                          "Chevrolet Onix (2013)", NA, "Peugeot 208", "VOLKSWAGEN Suran (2015)", 
                          "VOLKSWAGEN Voyage (2012)", "CHEVROLET Spin (2012)", "CHEVROLET Cobalt", 
                          "TOYOTA Hilux (ARG 2012)", "FORD EcoSport (2012)")), row.names = c(NA, 
                                                                                             20L), class = "data.frame")
...