如果满足另一行的条件,则删除组中的行

时间:2018-07-02 14:03:14

标签: r

我有一个数据框df(带有4个变量的+/- 331000个观测值),带有Date(格式为“%Y-%m-%d”的范围),{{ 1}}(具有19个级别的因数),ID(具有18个级别的因数)和StationPresence)。 数据帧的设置方式是,每个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 

但是,我不知道如何从那里继续。我不知道如何处理相反的条件。

1 个答案:

答案 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