У меня есть три условия, которые все должны быть выполнены, которые определяют, в какой случай должна быть помещена конкретная запись. Все переменные x, y и z находятся в диапазоне [1,10]. Мой вклад будет нижняя и верхняя границы для каждого условия и для каждого случая. Я понимаю, что если бы у меня было только одно условие, я мог бы сравнивать диапазоны напрямую, т. Е.
case1: [a,b] case2: [c,d] and check a <= d and c <= b
Цель состояла бы в том, чтобы определить случаи на основе условий, а на выходе было бы указано, какие случаи перекрываются друг с другом, чтобы я мог переопределить.
Однако я не уверен, как расширить лог c до пересечения условий и кодировать его в R. TIA
Пример кода: Это Таблица предоставляет условия для оператора case
structure(list(Case = c(1, 2, 3, 4, 5, 6), x_lower = c(9, 1,
9, 3, 3, 1), x_upper = c(10, 2, 10, 5, 6, 2), y_lower = c(9,
1, 1, 4, 4, 1), y_upper = c(10, 2, 2, 6, 7, 2), z_lower = c(9,
1, 1, 3, 3, 1), z_upper = c(10, 2, 2, 4, 5, 2), `Overlapping Case` = c(NA,
NA, NA, NA, NA, NA)), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"))
некоторые данные для проверки logi c, Case2
и Case6
всегда будут перекрываться, и я считаю, что Case4
всегда содержится в Case5
library(tidyverse)
set.seed(10)
dat=data.frame(x=sample(1:10,size=1000,replace=TRUE),y=sample(1:10,size=1000,replace=TRUE),
z=sample(1:10,size=1000,replace=TRUE)) %>%
mutate(Case= case_when( between(x,9,10) & between(y,9,10) & between(z,9,10)~ "Case1",
between(x,1,2) & between(y,1,2) & between(z,1,2)~"Case2",
between(x,9,10) & between(y,1,2) & between(z,1,2)~"Case3",
between(x,3,5) & between(y,4,6) & between(z,3,4)~"Case4",
between(x,3,6) & between(y,4,7) & between(z,3,5)~"Case5",
between(x,1,2) & between(y,1,2) & between(z,1,2)~"Case6",
TRUE ~ "Other"))