我有一个数据框df
(带有4个变量的+/- 331000个观测值),带有Date
(格式为“%Y-%m-%d”的范围),{{ 1}}(具有19个级别的因数),ID
(具有18个级别的因数)和Station
(Presence
)。
数据帧的设置方式是,每个1/0
的每个ID
都有一个日期范围(近三年的时间),以及是否有人在场(Station
)在特定日期的特定站点。
如果要根据日期和ID对df进行子集/过滤,您将获得以下数据集(从现在开始,我将其称为“组”):
1/0
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
的行,例如Fred在2016年分别位于Station4,Station9和Station 15- 01-06)。但是,如果组中没有df$Presence == 1
行,请不要删除任何行(因此我不能简单地删除所有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
但是,我不知道如何从那里继续。我不知道如何处理相反的条件。
答案 0 :(得分:0)
library(tidyverse)
dat%>%
group_by(Date,ID)%>%
filter(all(Presence==0)|Presence==1)
# A tibble: 19 x 4
# Groups: Date, ID [2]
Date ID Station Presence
<chr> <chr> <chr> <int>
1 2016-01-03 Fred Station4 1
2 2016-01-03 Mark Station1 0
3 2016-01-03 Mark Station2 0
4 2016-01-03 Mark Station3 0
5 2016-01-03 Mark Station4 0
6 2016-01-03 Mark Station5 0
7 2016-01-03 Mark Station6 0
8 2016-01-03 Mark Station7 0
9 2016-01-03 Mark Station8 0
10 2016-01-03 Mark Station9 0
11 2016-01-03 Mark Station10 0
12 2016-01-03 Mark Station11 0
13 2016-01-03 Mark Station12 0
14 2016-01-03 Mark Station13 0
15 2016-01-03 Mark Station14 0
16 2016-01-03 Mark Station15 0
17 2016-01-03 Mark Station16 0
18 2016-01-03 Mark Station17 0
19 2016-01-03 Mark Station18 0