У меня есть фрейм данных df
(+/- 331000 наблюдений с 4 переменными) с Date
(диапазон в формате = "% Y-% m-% d"), ID
(коэффициент с 19 уровней), Station
(фактор с 18 уровнями) и Presence
(1/0
).
Фрейм данных настроен таким образом, что существует диапазон дат (в течение почти трехлетнего периода) для каждого ID
в каждом Station
, и присутствует ли человек (1/0
) в определенный день в конкретная станция.
Если кто-то поднастроит / отфильтрует df по дню и идентификатору, вы получите следующий набор данных (теперь я буду называть это «группой»):
filter(df, Date == "2016-01-03" & ID == "Fred")
Date ID Station Presence
<date> <fct> <fct> <dbl>
2016-01-03 Fred Station1 0
2016-01-03 Fred Station2 0
2016-01-03 Fred Station3 0
2016-01-03 Fred Station4 1
2016-01-03 Fred Station5 0
2016-01-03 Fred Station6 0
2016-01-03 Fred Station7 0
2016-01-03 Fred Station8 0
2016-01-03 Fred Station9 0
2016-01-03 Fred Station10 0
2016-01-03 Fred Station11 0
2016-01-03 Fred Station12 0
2016-01-03 Fred Station13 0
2016-01-03 Fred Station14 0
2016-01-03 Fred Station15 0
2016-01-03 Fred Station16 0
2016-01-03 Fred Station17 0
2016-01-03 Fred Station18 0
Я хотел бы удалить строки из группы, если выполняются следующие условия:
Для каждой группы, если df$Presence == 1
, удалите строки с df$Presence == 0
(возможно иметь строки с несколькими df$Presence == 1
в одной группе, например, Фред был на Station4, Station9 и Station 15 2016-01-06). Но если в группе нет строк с df$Presence == 1
, не удаляйте ни одну из строк (поэтому я не могу просто удалить все df$Presence == 0
строки).
Таким образом, указанная группа станет:
Date ID Station Presence
<date> <fct> <fct> <dbl>
2016-01-03 Fred Station4 1
Однако следующая группа останется такой, как есть (поскольку в группе нет Presence == 1
):
filter(df, Date== "2016-01-03" & ID == "Mark")
Date ID Station Presence
<date> <fct> <fct> <dbl>
2016-01-03 Mark Station1 0
2016-01-03 Mark Station2 0
2016-01-03 Mark Station3 0
2016-01-03 Mark Station4 0
2016-01-03 Mark Station5 0
2016-01-03 Mark Station6 0
2016-01-03 Mark Station7 0
2016-01-03 Mark Station8 0
2016-01-03 Mark Station9 0
2016-01-03 Mark Station10 0
2016-01-03 Mark Station11 0
2016-01-03 Mark Station12 0
2016-01-03 Mark Station13 0
2016-01-03 Mark Station14 0
2016-01-03 Mark Station15 0
2016-01-03 Mark Station16 0
2016-01-03 Mark Station17 0
2016-01-03 Mark Station18 0
Я думал начать с
df %>%
group_by(Date, ID) %>%
Однако я не знаю, как действовать дальше. Я не знаю, как бороться с контрастными условиями.