У меня есть такой фрейм данных
ID <- c("A","A","A","A","A","A","A","A")
Step <- c("Step_1","Step_1","Step_2","Step_2","Step_3","Step_3","Step_3","Step_4")
Passfail <- c("Pass","Pass","Fail","Pass","Fail","Fail","Pass","Fail")
Measurement <- c("Length","Length","Breadth","Breadth",
"Height","Height","Height","Width")
df <- data.frame(ID,Step,Passfail,Measurement)
Я пытаюсь создать несколько столбцов, которые при значении true должны возвращать 1, иначе 0 GROUPED by (Measurement, ID, ToolID)
Для каждой группы
- AP = 1, если только проходит в passfail
- AF = 1, если терпит неудачу только в passfail
- SFP = 1, если только 1 сбой и по крайней мере 1 проход в passfail
- MFP = 1, если больше чем 1 сбой и по крайней мере 1 проход в passfail.
Желаемый выход is
Measurement ID Step AP AF SFP MFP
Length A Step_1 1 0 0 0
Breadth A Step_2 0 0 1 0
Height A Step_3 0 0 0 1
Width A Step_4 0 1 0 0
Я пытаюсь таким образом получить столбцы AP и AF, но не совсем понимаю
library(dplyr)
df1 <- df %>%
group_by(Measurement,ID,Step) %>%
mutate(AP = case_when((Passfail == "Pass" & Passfail != "Fail") ~ 1, TRUE ~ 0),
AF = case_when((Passfail == "Fail" & Passfail != "Pass") ~ 1, TRUE ~ 0)
) %>%
distinct()