У меня есть два больших фрейма данных (nrow = 20,000)
, с общими переменными в каждом (X, Y and Z)
. Каждый фрейм данных имеет несколько уникальных значений одной переменной (Y)
, но значения X and Z
отличаются. Я хотел бы отфильтровать один кадр данных (больший из двух (df2)
) по диапазону значений X
в меньшем кадре данных (df1)
для каждого уникального значения Y
. Так, например, если диапазон значений X
в df1
для уникального значения Y
1 равен 0,02 - 0,08, то я хотел бы получить все значения X
и Z
из df2
где значение X попадает в этот диапазон для данного значения Y
. Я хотел бы создать новый фрейм данных, содержащий эти отфильтрованные значения.
Вот пример кода и данных, которые можно использовать в качестве примера
# GENERATE SOME DATA
set.seed(5)
df1 <- data.frame(X = round(runif(20, 0.2, 0.3),4), Y = rep(c(4, 5, 6, 7, 8), each = 4), Z = round(runif(20),3))
df2 <- data.frame(X = round(runif(50, 0.1, 0.6),4), Y = rep(seq(1,10,1), each = 5), Z = round(runif(50),3))
## ESTABLISH THE RANGE OF X VALUES FOR EACH UNIQUE Y VALUE IN THE DATA FRAME OF INTEREST (df1)
library(dplyr)
df3 <- df1 %>%
group_by(Y) %>%
mutate(minX=min(X), maxX=max(X)) %>%
ungroup() %>%
distinct(Y, minX, maxX)
## FILTER df2 BY THE RANGE OF Y VALUES IN df1
df4<- df2 %>% filter(Y %in% df1$Y)
Так что теперь у меня есть df2
, отфильтрованный, чтобы дать Мне только диапазон Y
значений, которые являются общими для обоих кадров данных (df4)
. Здесь мне нужно создать новый кадр данных из df4
, который содержит только значения X
, которые находятся в диапазоне значений X
в df1
для каждого значения Y
(df3)
.
Любая помощь с благодарностью.