Использование результатов case_when из первой строки и использование результатов для оценки второго условия - PullRequest
0 голосов
/ 18 мая 2019

Я довольно плохо знаком с R и пытаюсь очистить данные. Я использую case_when, чтобы назначить переменные Yes, No и Unknown. Я хочу назначить одну и ту же переменную Нет и Неизвестно, если в первом утверждении ей присвоено значение Да, а в других утверждениях - true или false.

Вот что у меня есть:

    ID col1  col2  
    1   Ball  a  
    2   NA    c   
    3   Bat   b  

Вот чего я пытаюсь достичь:

    ID col1  col2  x
    1   Ball  a   No
    2   NA    c   Yes
    3   Bat   b   Unknown
 mutate(x = case_when(
      is.na(col1) == TRUE ~ "Yes",
      !is.na(col1) == TRUE & (col2 %in% c("a", "b")|
      (col2 == "YES" & x == "Unknown" ) == TRUE ) ~ "No"),
TRUE ~ "Unknown"
))

В основном я хочу использовать результаты x из первого case_when и использовать его во 2-й строке кода. Я в основном хочу, чтобы мой столбец х был "Да", если col1 равен NA. И если col1 не отсутствует и (col2% в% c ("a", "b") или col1 == "Bat" и x = "Yes"), тогда установите x = "No"

Есть ли способ заставить это работать. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 мая 2019

https://dplyr.tidyverse.org/reference/case_when.html

case_when позволяет перечислить серию тестов и назначить значение, связанное с первыми проходящими тестами (т. Е. TRUE).

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

library(dplyr)
df %>%
  mutate(x = case_when(
    # First, test if col1 is NA -- if so, x will be "Yes" and we are done with the case_when.
    is.na(col1)  ~ "Yes",

    # For the second test, I'll rely on the text of your latest edit:
    #   "And if col1 is not missing and (col2 %in% c("a", "b") or 
    #    col1 == "Bat" and x = "Yes") then set x = "No"
    # (Note, this doesn't seem to be consistent with your output table...)

    # To get here means the prior test was false: col1 must have a non-NA value.
    col2 %in% c("a", "b") | col1 == "Bat"  ~ "No",

    # Otherwise, set to unknown
    TRUE  ~ "Unknown"
  ))

  ID col1 col2   x
1  1 Ball    a  No
2  2 <NA>    c Yes
3  3  Bat    b  No
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...