Возможно, это односторонний способ (здесь намеренно сделано больше промежуточных переменных, его можно сократить). Мой лог c заключался в том, что сопоставление A
и B
может использоваться для присоединения к df (шаг 1 - в результате получается фрейм данных s1
), а затем дальнейшая фильтрация по условиям numeri c (шаг 2 - в результате фрейм данных s2
):
df1 <- tibble::tribble(
~A, ~B, ~C, ~D,
"a", "t", 4, 9,
"s", "p" , 3, 7,
"w", "d", 1, 10
)
df2 <- tibble::tribble(
~A, ~B, ~C, ~D,
"a", "t", 3 , 7,
"m", "r", 5, 8,
"p", "m", 1 , 3,
"g", "u", 5, 2,
"s", "p", 2 , 6)
new_df<-df1[df1$A == df2$A && df1$B == df2$B && (df1$C > (df2$C - 5) && df1$C < (df2$C + 5)), ]
s1 <- inner_join(df1, df2, by = (c("A", "B")), suffix = c(".from1", ".from2"))
s2 <- s1 %>%
mutate(condition1 = C.from1 > C.from2 - 5,
condition2 = C.from1 < C.from2 + 5) %>%
filter(condition1, condition2) %>%
select(-starts_with("condition"))