Может быть, это поможет
library(dplyr)
df2 <- df1 %>%
group_by(UniqueID) %>%
filter(first(FirstObs) == 1 & n() > 1)
df3 <- anti_join(df1, df2)
Это также может быть
library(stringr)
df2 <- df1 %>%
group_by(UniqueID) %>%
filter(first(FirstObs) == 1,
str_remove(first(MonthYear), "-\\d+") == "OCT")
df3 <- anti_join(df1, df2)
Или split
в list
фреймах данных
df1 %>%
group_by(UniqueID) %>%
mutate(grp = first(FirstObs) == 1 & n() > 1) %>%
ungroup %>%
group_split(grp, keep = FALSE)
#[[1]]
# A tibble: 3 x 3
# UniqueID MonthYear FirstObs
# <chr> <chr> <int>
#1 DEF446 MAY-19 1
#2 DEF456 JUN-19 0
#3 DEF456 JUL-19 0
#[[2]]
# A tibble: 6 x 3
# UniqueID MonthYear FirstObs
# <chr> <chr> <int>
#1 ABC123 OCT-18 1
#2 ABC123 NOV-18 0
#3 ABC123 JAN-19 0
#4 ABC123 FEB-19 0
#5 GHI789 OCT-18 1
#6 GHI789 NOV-18 0
данные
df1 <- structure(list(UniqueID = c("ABC123", "ABC123", "ABC123", "ABC123",
"DEF446", "DEF456", "DEF456", "GHI789", "GHI789"), MonthYear = c("OCT-18",
"NOV-18", "JAN-19", "FEB-19", "MAY-19", "JUN-19", "JUL-19", "OCT-18",
"NOV-18"), FirstObs = c(1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L)),
class = "data.frame", row.names = c(NA,
-9L))