Запись нескольких значений в столбце с помощью оператора ifelse - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в использовании «R» (раньше использовал SPSS), у меня проблемы с перекодированием значений для переменной, учитывая многочисленные ответы или случаи для этой переменной.Я пытаюсь использовать функцию «ifelse» для достижения этой цели, но я не могу заставить функцию работать для изменения более двух значений для переменных.Я хочу перекодировать ответы для переменной с несколькими случаями.В настоящее время данные включают # 1, 2, 3, 4, и я хочу перекодировать эти числа следующим образом:

  • (1 = 0,6)
  • (2 = 1,2)
  • (3 = 2,5)
  • (4 = 1,8)

Я пытаюсь использовать функцию «ifelse» для достижения этой цели, но я не могу сделать функциюработать для изменения более двух разных значений для конкретной переменной.

ChildPABase19_test$Predilection_1 <- ifelse(ChildPABase19_test$Predilection_1==1, 0.6, ifelse(ChildPABase19_test$Predilection_1==2, 1.2,
ifelse(ChildPABase19_test$Predilection_1==3, 2.5, ifelse(ChildPABase19_test$Predilection_1==4, 1.8))

Я бы хотел, чтобы все данные в столбце для переменной Predilection_1 были перекодированы с 0,6, 1,2, 2,5, 1,8, но я получаю сообщение об ошибке: аргумент "нет" отсутствует, бездефолт.Будем очень благодарны за любые идеи о том, как я могу изменить этот код!

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Я думаю, этот код с использованием пакета dplyr может помочь:

require(dplyr)
x = c(1, 2, 3, 4)
transform_rule <- list(
    "1" = "0.6",
    "2" = "1.2",
    "3" = "2.5",
    "4" = "1.8"
)
x_recoded <- as.numeric(recode(x, !!!transform_rule))
0 голосов
/ 15 февраля 2019
library(expss)
ChildPABase19_test = data.frame(Predilection_1 = c(1, 2, 3, 4))
recode(ChildPABase19_test$Predilection_1) = c(1 ~ 0.6, 2 ~ 1.2, 3 ~ 2.5, 4 ~ 1.8)

ChildPABase19_test
#    Predilection_1
# 1            0.6
# 2            1.2
# 3            2.5
# 4            1.8
0 голосов
/ 15 февраля 2019

Возможно, вам будет проще увидеть проблему, если вы добавите больше пробела к коду.

ChildPABase19_test$Predilection_1 <- ifelse(
  ChildPABase19_test$Predilection_1 == 1, 
  0.6, 
  ifelse(
    ChildPABase19_test$Predilection_1 == 2, 
    1.2, 
    ifelse(
      ChildPABase19_test$Predilection_1 == 3, 
      2.5, 
      ifelse(
        ChildPABase19_test$Predilection_1 == 4, 
        1.8
      )
    )

Из этого вы можете увидеть две вещи: финал ifelse() имеет только два аргумента, а не три, и отсутствуют две закрывающие скобки.Первое, что вызывает сообщение об ошибке: отсутствующим третьим аргументом является аргумент «нет», на который жалуется R, отсутствует.Вам следует установить для этого аргумента любое значение, которое вы хотите, чтобы значение Predilection_1 было, если исходное значение не равно 1, 2, 3 или 4. Если у вас нет значения, вы, вероятно, должны установить его наNA.

Вы также должны добавить две пропущенные закрывающие скобки, иначе код не запустится.

Сложность чтения вложенных функций ifelse() является одной из причин, по которой В пакет dplyr входит функция case_when().Вы можете использовать это для создания гораздо более короткого кода:

ChildPABase19_test <- mutate(ChildPABase19_test, Predilection_1 = case_when(
  Predilection_1 == 1 ~ 0.6,
  Predilection_1 == 2 ~ 1.2,
  Predilection_1 == 3 ~ 2.5,
  Predilection_1 == 4 ~ 1.8,
  TRUE ~ NA_real_
))

Примеры в документации для case_when() довольно неплохо объясняют синтаксис, если вам нужна дополнительная помощь.

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