Р: Как создать определенные c l oop и операторы ifelse для моего набора данных. (ДАННЫЕ УСТАНОВЛЕНЫ) - PullRequest
0 голосов
/ 11 апреля 2020

Я новичок в R, и я хотел бы попросить вашего совета о типе кода, который может помочь мне в выполнении сложной задачи. У меня есть набор переменных, которые содержат значения прохода или неудачи. Основываясь на этих значениях, тестовая функция должна выполнять sh задач, написанных ниже:

  1. Проверьте, если Normal == Fail, если true, создайте новый столбец с именем test, который вставляет «Fail» в столбец для этого конкретного случая.

  2. Если в норме == Fail, false, проверить от PD до SA == Fail. Если true, вставьте «Fail» в столбец с именем test, который был создан на шаге 1.

  3. Если PD to SA == Fail - false, вставьте «pass» в столбец с именем test созданный на шаге 1.

  4. Любые NA в конкретном случае следует пропускать.

В идеале таблица в конце должна выглядеть как это: Пример 1

Как видно из примера 1, несмотря на то, что нормально == pass, потому что TH == Fail, конечный результат тестового столбца был «fail».

В Пример 2 , Все значения от нормального до SA == pass, конечный результат тестового столбца == "Pass".

Наконец, в Пример 3 , потому что normal == "Fail", конечный результат столбца теста == "Fail".

Я пытался создать эту функцию и повторить 2000 случаев в моем наборе данных. Но никто не работал. Любая помощь будет оценена. Я приложил ссылку на свой набор данных в вопросе для справки. https://drive.google.com/file/d/1nd0c99kuMiUdjhiKxNHK-j5TY9de9vbX/view?usp=sharing

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Используя dplyr и case_when:

library(dplyr)

data %>%
  mutate(Test=case_when(
    Normal=="Fail" ~ "Fail", 
    Normal!="Fail" & rowSums(select(., PD:SA) == "Fail", na.rm=TRUE) > 0 ~ "Fail",
    Normal=="Pass" ~ "Pass"))

# A tibble: 2,490 x 9
   Normal PD    MP    TH    Py    KA    VT    SA    Test 
   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
 1 Pass   Pass  Pass  Fail  Pass  Pass  Pass  Pass  Fail 
 2 Pass   Pass  Fail  Pass  Pass  Pass  Pass  Pass  Fail 
 3 Fail   Pass  Pass  Pass  Pass  Pass  Pass  Fail  Fail 
 4 Pass   Fail  Pass  Pass  Pass  Pass  Pass  Pass  Fail 
 5 Fail   Pass  Fail  Pass  Pass  Pass  Fail  Pass  Fail 
 6 Pass   Pass  Fail  Fail  Pass  Pass  Fail  Pass  Fail 
 7 Pass   Pass  Fail  Pass  Pass  Pass  Pass  Pass  Fail 
 8 Fail   Pass  Fail  Pass  Pass  Pass  Pass  Pass  Fail 
 9 Pass   Fail  Fail  Pass  Pass  Pass  Fail  Pass  Fail 
10 Pass   Pass  Pass  Fail  Pass  Pass  Fail  Pass  Fail 
# ... with 2,480 more rows

Я должен был найти несколько проходов:

%>%
  filter(Test=="Pass")
# A tibble: 257 x 9
   Normal PD    MP    TH    Py    KA    VT    SA    Test 
   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
 1 Pass   Pass  Pass  Pass  Pass  Pass  Pass  Pass  Pass 
 2 Pass   Pass  Pass  Pass  Pass  Pass  Pass  Pass  Pass 
 3 Pass   Pass  Pass  Pass  Pass  Pass  Pass  Pass  Pass 
 4 Pass   Pass  Pass  Pass  Pass  Pass  Pass  Pass  Pass 
 5 Pass   Pass  Pass  Pass  Pass  Pass  Pass  Pass  Pass 

И еще есть некоторые <NA>. Выделился этот (# 541):

  %>% slice(541)
# A tibble: 1 x 9
  Normal PD    MP    TH    Py    KA    VT    SA    Test 
  <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Pass   Pass  Fail  Fail  NA    Pass  Fail  Pass  Fail 

И итоговая таблица дает:

%>% count(Test)
# A tibble: 3 x 2
# Groups:   Test [3]
  Test      n
  <chr> <int>
1 Fail   2144
2 Pass    256
3 NA       90

Данные :

dput(head(data, 100))

data <- structure(list(Normal = c("Pass", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Fail", "Pass", "Pass", "Fail", "Fail", "Pass", 
"Pass", "Fail", "Fail", "Pass", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail", 
"Fail", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", 
"Fail", "Pass", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", 
"Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Fail", "Fail", 
"Fail", "Fail", "Pass", "Fail", "Pass", "Fail", "Pass", "Pass", 
"Fail", "Fail", "Pass", "Pass", "Fail", "Pass", "Fail", "Fail", 
"Pass", "Pass", "Fail", NA, "Pass", "Fail", "Pass", "Fail", "Fail", 
"Pass", "Pass", "Fail", "Fail", "Fail", "Pass"), PD = c("Pass", 
"Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass", 
"Pass", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", "Fail", 
"Fail", "Fail", "Fail", "Pass", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Fail", "Pass", "Pass", "Fail", "Pass", "Pass", "Fail", 
"Pass", "Fail", "Fail", "Fail", "Pass", "Fail", "Fail", "Pass", 
"Fail", "Pass", "Fail", "Fail", "Pass", "Pass", "Pass", "Fail", 
"Fail", "Fail", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", 
"Fail", "Pass", "Fail", "Fail", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Fail", 
"Pass", "Fail", "Fail", "Fail", "Fail", "Fail", "Pass", NA, "Pass", 
"Pass", "Fail", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail", 
"Pass", "Fail"), MP = c("Pass", "Fail", "Pass", "Pass", "Fail", 
"Fail", "Fail", "Fail", "Fail", "Pass", "Fail", "Fail", "Fail", 
"Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Fail", 
"Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", 
"Pass", "Fail", "Pass", "Pass", "Fail", "Fail", "Fail", "Pass", 
"Fail", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Fail", 
"Fail", "Fail", "Pass", "Fail", "Fail", "Fail", "Pass", "Fail", 
"Fail", "Fail", "Pass", "Fail", "Pass", "Fail", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Fail", "Pass", "Fail", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Fail", "Fail", "Fail", NA, "Pass", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Fail", "Pass", "Pass", "Fail", "Fail"), TH = c("Fail", 
"Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", 
"Fail", "Pass", "Fail", "Fail", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Fail", 
"Fail", "Fail", "Pass", "Fail", "Pass", "Pass", "Fail", "Pass", 
"Fail", "Pass", "Pass", "Fail", "Fail", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", 
"Fail", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass", 
"Fail", "Pass", "Pass", "Pass", "Fail", "Fail", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Pass", "Fail", "Fail", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Pass", NA, "Pass", 
"Pass", "Fail", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass"), Py = c("Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", NA, "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass"), KA = c("Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", NA, "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass"), VT = c("Pass", "Pass", "Pass", "Pass", "Fail", 
"Fail", "Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", 
"Fail", "Fail", "Pass", "Fail", "Pass", "Fail", "Pass", "Fail", 
"Fail", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Fail", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Fail", "Fail", 
"Fail", "Pass", "Fail", "Pass", "Fail", "Fail", "Pass", "Pass", 
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Fail", "Fail", 
"Pass", "Fail", "Fail", "Fail", "Pass", "Fail", "Pass", "Fail", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Fail", "Fail", NA, "Pass", "Fail", "Pass", "Fail", "Fail", 
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail"), SA = c("Pass", 
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Fail", "Pass", "Pass", "Fail", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", NA, "Pass", 
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", 
"Pass", "Pass")), row.names = c(NA, -100L), class = c("tbl_df", 
"tbl", "data.frame"))
0 голосов
/ 11 апреля 2020

Если я правильно понял вашу проблему,

в этом конкретном c случае, что-то подобное должно работать

A_

require(readr)
require(dplyr)

data <- read_delim('~/Downloads/datahelp.csv', delim = ',')

data <- data %>% 
  mutate(test = 'Pass',
         test = ifelse(Normal == 'Fail', 'Fail', test),
         test = ifelse(Normal != 'Fail' & (PD=='Fail'| MP=='Fail'| TH=='Fail'| Py=='Fail'| KA=='Fail'| VT=='Fail'| SA=='Fail'), 'Fail', test))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...