Условное присвоение с помощью mutate и ifelse

Имея такие данные (см. Ниже), я пытаюсь создать новый столбец IRISCOM на основе условного теста с помощью mutate ().

COMMUNE|IRIS|NB
35360|353600101|45
35361|ZZZZZZ|72

Я пробовал с data=mutate(data, IRISCOM= ifelse(IRIS == "ZZZZZZZZZ", COMMUNE, IRIS))

Он пишет правильно COMMUNE, но записывает 1 вместо кода IRIS, как и ожидалось.

Я пробовал еще несколько экспериментов, но безуспешно.


person simo    schedule 08.06.2018    source источник
comment
Это потому, что IRIS - это factor; числовое значение, соответствующее уровню фактора 353600101, равно 1.   -  person Maurits Evers    schedule 08.06.2018


Ответы (1)


Чтобы исправить проблему factor (см. Мой комментарий выше), мы можем сделать следующее

library(tidyverse)
data %>%
    mutate_if(is.factor, as.character) %>%
    mutate(IRISCOM = ifelse(IRIS == "ZZZZZZ", COMMUNE, IRIS))
#  COMMUNE      IRIS NB   IRISCOM
#1   35360 353600101 45 353600101
#2   35361    ZZZZZZ 72     35361

Образец данных

data <- read.table(text =
    "COMMUNE|IRIS|NB
35360|353600101|45
35361|ZZZZZZ|72", header = T, sep = "|")
person Maurits Evers    schedule 08.06.2018