Как использовать функцию ifelse для двух условий, объединяющих строки и значения? - PullRequest
0 голосов
/ 11 февраля 2019

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

     observed predicted probability results1
1     Head-up   Grazing   0.2727273 NEGATIVE
2     Head-up   Grazing   0.7272727 NEGATIVE
3     Head-up   Grazing   0.7272727 NEGATIVE
4     Head-up   Grazing   0.5454545 NEGATIVE
5     Head-up   Grazing   0.7272727 NEGATIVE
6     Head-up   Grazing   0.4545455 NEGATIVE
7     Head-up Vigilance   0.3636364 NEGATIVE
8     Head-up   Grazing   0.3636364 NEGATIVE
9     Head-up Vigilance   0.3636364 NEGATIVE
10    Unknown   Grazing   0.3636364 NEGATIVE
11     Moving   Head-up   0.4545455 NEGATIVE
12     Moving   Grazing   0.3636364 NEGATIVE
13    Head-up   Grazing   0.4545455 NEGATIVE
14    Head-up   Grazing   0.3636364 NEGATIVE
15    Head-up   Grazing   0.4545455 NEGATIVE
16    Head-up   Grazing   0.3636364 NEGATIVE
17    Head-up   Head-up   0.4545455 POSITIVE

В этом случае я хотел бы создать 5-й столбец results2 с ifelse, имеющим два условия:

1) Еслиprobability больше 0,5, а results1 равно "POSITIVE", я бы хотел, чтобы results2 было "TRUE".Если probability ниже 0,5 и results1 равно "POSITIVE", я бы хотел, чтобы results2 было "FALSE".

2) Если probability больше 0,5 и results1 равно"NEGATIVE", я бы хотел, чтобы results2 было "FALSE".Если probability меньше 0,5 и results1 равно "NEGATIVE", я бы хотел, чтобы results2 было "TRUE".

Я использовал для этого различные синтаксисы, такие как:

collar$result2<-ifelse(collar$results1=="POSITIVE" & collar$probability>0.5,"TRUE","FALSE"|ifelse(collar$results1=="NEGATIVE" & collar$probability>0.5,"FALSE","TRUE"))

Я получаю сообщение об ошибке: Error in ifelse(collar$results1 == "POSITIVE", collar$probability > 0.5, : unused argument ("FALSE")

Любая помощь приветствуется!

PS При использовании ошейника: $results2<-dplyr::mutate(collar,results2 = case_when( (probability > 0.5 & results1 == "POSITIVE") | (probability < 0.5 & results1 == "NEGATIVE") ~ TRUE, TRUE ~ FALSE) ) Я получаю (образец):

> print(collar)
     observed predicted probability results1 results2.observed results2.predicted results2.probability results2.results1
1     Head-up Vigilance   0.2727273 NEGATIVE           Head-up          Vigilance            0.2727273          NEGATIVE
2     Head-up   Grazing   0.7272727 NEGATIVE           Head-up            Grazing            0.7272727          NEGATIVE
3     Head-up   Grazing   0.7272727 NEGATIVE           Head-up            Grazing            0.7272727          NEGATIVE
4     Head-up   Grazing   0.5454545 NEGATIVE           Head-up            Grazing            0.5454545          NEGATIVE
5     Head-up   Grazing   0.7272727 NEGATIVE           Head-up            Grazing            0.7272727          NEGATIVE
6     Head-up   Grazing   0.4545455 NEGATIVE           Head-up            Grazing            0.4545455          NEGATIVE

1 Ответ

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

Возможно, вам лучше написать свою собственную функцию, чем вкладывать ее в функцию ifelse ().Кажется, что следующее соответствует вашим спецификациям (обратите внимание, что у вас могут быть случаи, когда вероятность == 0,5; здесь будет возвращаться NA):

results2 <- apply(collar,1,function(x)
  {
    if (x["results1"]=="POSITIVE" & x["probability"]>0.5) TRUE
    else if (x["results1"]=="POSITIVE" & x["probability"] < 0.5) FALSE
    else if (x["results1"]=="NEGATIVE" & x["probability"]>0.5) FALSE
    else if (x["results1"]=="NEGATIVE" & x["probability"]<0.5) TRUE
    else NA
  })

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