Использование if, иначе в перекодировании

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

data$var1 имеет значения от 1 до 7, которые я пытаюсь уменьшить до 2 значения в новой переменной с именем data$var2, Код выглядит так:

data$var2 <- recode(data$var1, "1:3=1; else=0")

Однако, когда я выполняю код, я получаю следующую ошибку:

"Ошибка: Аргумент 2 должен быть назван, а не неназван"

Я работаю в последней версии R и использую пакет Tidyverse.

Что мне не хватает? Что означает "Аргумент 2 без названия"?

2 ответа

Решение

Я бы посоветовал использовать ifelse:

data$var2 <- ifelse(data$var1 < 4, 1, 0)

Ваше использование recode неправильно:

data$var2<- recode(data$var1, "1:3=1; else=0")

Вместо нескольких аргументов [name]=[replacement] Вы предоставили только одну строку. Для получения дополнительной информации читайте help('recode'),

"Правильный" путь с recode было бы что-то вроде

data$var2 <- recode(data$var1, `1` = 1, `2` = 1, `3` = 1, .default = 0)

Но вы должны придерживаться ifelse в этом случае.

Есть много для этого, вероятно, многие из них проще, чем мой подход.

 # Create some data
 df      <- c()
 df$var1 <- ceiling(runif(20, min = 0.5, max = 7.5))
 df$var1
 #  [1] 5 8 5 2 6 6 8 4 5 4 4 7 3 6 1 5 7 6 5 6

 # inds will contain TRUE/FALSE 
 inds           <- (df$var1 <= 3)
 df$var2[inds]  <- 1
 df$var2[!inds] <- 0
 df$var2
 # [1] 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1

Sidenote: я использовал df как имя моего объекта, потому что не очень хорошая идея вызывать объекты data, Имя data зарезервировано в R для других целей (см. ?data). Хотя в этом случае это, вероятно, не приведет к проблемам, я все же рекомендую использовать df (или что-нибудь еще) вместо data

Другие вопросы по тегам