Это похоже на достаточно распространенную задачу, и я предполагаю, что для ее выполнения существует установленная функция / метод. Я представляю себе функцию, подобную dplyr::filter_after()
, но, похоже, ее нет.
Вот метод, который я использую в качестве отправной точки:
#Setup:
library(dplyr)
threshold <- 3
test.df <- data.frame("num"=c(1:5,1:5),"let"=letters[1:10])
#Drop every row that follows the first 3, including that row:
out.df <- test.df %>%
mutate(pastThreshold = cumsum(num>=threshold)) %>%
filter(pastThreshold==0) %>%
dplyr::select(-pastThreshold)
Это дает желаемый результат:
> out.df
num let
1 1 a
2 2 b
Есть ли другое решение, которое менее многословно?