У меня есть фрейм данных df1
, содержащий данные и группы, и df2
, в котором хранятся те же группы и одно значение на группу.
Я хочу отфильтровать строки df1
по df2
, где lag
по группам выше указанного значения.
Фиктивный пример:
# identify the first year of disturbance by lag by group
df1 <- data.frame(year = c(1:4, 1:4),
mort = c(5,16,40,4,5,6,10,108),
distance = rep(c("a", "b"), each = 4))
df2 = data.frame(distance = c("a", "b"),
my.median = c(12,1))
Теперь вычислите лаг между значениями (создает новый столбец) и фильтром df1
на основе значений столбца df2
:
# calculate lag between years
df1 %>%
group_by(distance) %>%
dplyr::mutate(yearLag = mort - lag(mort, default = 0)) %>%
filter(yearLag > df2$my.median) ##
Это, однако, не дает ожидаемых результатов:
# A tibble: 3 x 4
# Groups: distance [2]
year mort distance yearLag
<int> <dbl> <fct> <dbl>
1 2 16 a 11
2 3 40 a 24
3 4 108 b 98
Вместо этого я ожидаю получить:
# A tibble: 3 x 4
# Groups: distance [2]
year mort distance yearLag
<int> <dbl> <fct> <dbl>
1 3 40 a 24
2 1 5 b 5
3 3 10 b 4
filter
прекрасно работает при применении к одному значению, но как адаптировать его к вектору, а особенно к вектору групп (как может потенциально измениться порядок элементов?)