Вложенный оператор ifelse со строками - PullRequest
0 голосов
/ 19 февраля 2019

У меня возникли проблемы с отладкой моего вложенного оператора ifelse.

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

Если математика, чтение, запись все читаются как «pass», то элемент в векторе Result должен быть «Pass», еслиесть столбец «Да» «Исключить», тогда элемент в векторе результатов должен быть «Исключен», все остальное должно читаться как «Не прошло».

Math <-c("Pass", "Not Pass", "Not Pass", "NA", "NA", "NA")
Read<-c("Pass","Pass","Not Pass", "NA", "NA", "NA") 
Write<-c("Pass","Pass", "Not Pass", "NA", "NA", "NA") 
Exempt<-c( "NA", "NA", "NA","yes","yes","yes") 
dat<-cbind(Math,Read,Write,Exempt)


dat$Result <- 
    ifelse(dat$math=="Pass" & dat$Read=="Pass" & dat$writing == "Pass",
           "Pass",
           ifelse(dat$Exempt == "yes", "Exempt", "Not Pass"))

1 Ответ

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

Вложенный ifelse в порядке:

set.seed(2)
df <- data.frame(a = rnorm(10), b = rnorm(10))
df$c <- ifelse(df$a > 0, "a+", ifelse(df$b > 0, "b+", "b-"))
head(df)
#             a           b  c
#1  -0.89691455  0.41765075 b+
#2   0.18484918  0.98175278 a+
#3   1.58784533 -0.39269536 a+
#4  -1.13037567 -1.03966898 b-
#5  -0.08025176  1.78222896 b+
#6   0.13242028 -2.31106908 a+

Однако, возможно, проблема в Praxis_Dat[, 22:24] == "Pass".Не понятно, что это значит?По крайней мере, если вы не предоставляете никаких данных.

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

res <- ifelse(df[,1:2] > 0, "a+", ifelse(df$b > 0, "b+", "b-"))
head(res)
#      a    b   
# [1,] "b+" "a+"
# [2,] "a+" "a+"
# [3,] "a+" "b-"
# [4,] "b-" "b-"
# [5,] "b+" "a+"
# [6,] "a+" "b-"

Конечно, вы должны быть осторожны, когда назначаете этот матричный вывод столбцу:

df$d <- ifelse(df[,1:2] > 0, "a+", ifelse(df$b > 0, "b+", "b-"))
head(df)
#            a          b  c d.a d.b
#1 -0.89691455  0.4176508 b+  b+  a+
#2  0.18484918  0.9817528 a+  a+  a+
#3  1.58784533 -0.3926954 a+  a+  b-
#4 -1.13037567 -1.0396690 b-  b-  b-
#5 -0.08025176  1.7822290 b+  b+  a+
#6  0.13242028 -2.3110691 a+  a+  b-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...