Используя 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"))