Вы можете использовать вложенные ifelse
transform(df, zip = factor(ifelse(Group == 1 & Test %in% c('Qz2', 'Qz4'), 1,
ifelse(Group == 1 & Test %in% c('Qz1', 'Qz3'), 2, 3))))
Или case_when
из dplyr
library(dplyr)
df %>%
mutate(zip = factor(case_when(Group == 1 & Test %in% c('Qz2', 'Qz4') ~ 1,
Group == 1 & Test %in% c('Qz1', 'Qz3') ~ 2,
TRUE ~ 3)))
# Participant Group Test Marks zip
#1 1 1 Qz1 2.4 2
#2 1 1 Qz2 3.2 1
#3 1 1 Qz3 2.0 2
#4 1 1 Qz4 1.0 1
#5 2 1 Qz1 3.0 2
#6 2 1 Qz2 4.0 1
#7 2 1 Qz3 3.0 2
#8 2 1 Qz4 4.0 1
#9 3 2 Qz1 4.0 3
#10 3 2 Qz2 2.0 3
#11 3 2 Qz3 3.0 3
#12 3 2 Qz4 2.0 3
data
df <- structure(list(Participant = structure(c(1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("1", "2", "3"), class = "factor"),
Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L), .Label = c("1", "2"), class = "factor"), Test = structure(c(1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("Qz1",
"Qz2", "Qz3", "Qz4"), class = "factor"), Marks = c(2.4, 3.2,
2, 1, 3, 4, 3, 4, 4, 2, 3, 2)), row.names = c(NA, -12L), class = "data.frame")