Использование case_when () в mutate () для создания уровней для факторной переменной - PullRequest
0 голосов
/ 30 января 2019

Я хочу создать факторную переменную, в которой все знаки препинания будут правильно помечены, а все символы помечены как "char"

char <- read.xlsx("ccp35.xlsx", sheet="CCP")
chars <- tbl_df(char)
chars$punc <- chars %>%
    mutate(punc = case_when(
        chars$Character =="," ~ "comma",
        chars$Character =="。"| "Character" =="?" ~ "stop"
        TRUE ~ "char"))

Я пробовал код без строки TRUE ~ "char",все работало хорошо, все символы помечены как «NA».

Но когда я добавил последнюю строку, произошла ошибка:

Error: unexpected numeric constant in:
"chars$Character =="。"| "Character" =="?" ~ "stop"
TRUE"

Ответы [ 2 ]

0 голосов
/ 30 января 2019

В вашем коде есть несколько ошибок:

  1. Вы забыли запятую в своем списке параметров.
  2. Вы случайно поместили Character в кавычки и рассматриваете его как строку -Подсветка синтаксиса предлагает подсказку.
  3. mutate возвращает тиббл, вы должны назначить его, например, на chars.Определенно не chars$punc.
  4. Хотя это и не ошибка, chars$ в вашем коде являются избыточными.
  5. Я также предлагаю исключить промежуточные переменные с неясными именами и использоватьконвейер для полного выражения.

Это оставляет нам:

chars <- read.xlsx("ccp35.xlsx", sheet="CCP") %>%
    as_tibble() %>%
    mutate(
        punc = case_when(
            Character == "," ~ "comma",
            Character == "。" | Character == "?" ~ "stop",
            TRUE ~ "char"
        )
    )

Я также призываю вас последовательно форматировать код и всегда ставить одиночные пробелы вокруг инфиксных операторов (каксделано в моем коде).

0 голосов
/ 30 января 2019

У меня нет ваших данных, но кажется, что вы забыли добавить "chars $" до "Character"=="?".Измените chars$Character =="。"| "Character" =="?" ~ "stop" на chars$Character =="。" | chars$Character =="?" ~ "stop" и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...