Использование оператора Ifelse в R - PullRequest
0 голосов
/ 06 июня 2018

У меня есть фрейм данных "var", и мне нужно получить выходной вектор, который удовлетворяет следующим условиям.

По сути, я пытаюсь выполнить следующее: если значение psqi_2_sleepstart1 меньше 15, comp21score необходимо присвоить значение 0;между 16 и 30, comp21score необходимо присвоить значение 1;между 31 и 60, comp21score должно быть присвоено значение 2, а более 60 comp21score должно принимать значение 3. Например, если для фрейма данных были значения для psqi_2_sleepstart1 как 16, 40, 6 и 10;Я хочу, чтобы выходные данные были 1, 2, 0, 1. Я использовал оператор ifelse, но я получил ошибку, что аргумент "да" отсутствует, без значения по умолчанию.

Вот моя попытка:

for (i in 1: nrow(var)) {
ifelse (psqi_2_sleepstart1 <= 15) 
comp21score [i] <- 0
ifelse (psqi_2_sleepstart1 > 15 & psqi_2_sleepstart1 <= 30)
comp21score [i] <- 1
ifelse (psqi_2_sleepstart1 > 30 & psqi_2_sleepstart1 <= 60)
comp21score [i] <- 2
ifelse (psqi_2_sleepstart1 > 60)
comp21score [i] <- 3 
}
print (comp21score)

У кого-нибудь есть предложения по поводу того, что я мог бы использовать вместо этого или как избежать этой ошибки?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Только для ударов - вот пример case_when dplyr (как упомянуто в комментариях):

DF1 <- data.frame("score"= 0:20)

DF1 <- DF1 %>% mutate(value = case_when(
 score < 5 ~ 1,
 score >= 5| score < 10 ~ 2,
 score >= 10 ~ 3
 )
)

> DF1
    score value
1      0     1
2      1     1
3      2     1
.....
0 голосов
/ 06 июня 2018

Используйте этот макет вместо:

x <- 2

if (x==0) {
  y <- log
} else if (x == 1) {
  y <- identity
} else if (x == 2) {
  y <- function(x) x^2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...