【发布时间】:2018-07-02 22:52:59
【问题描述】:
我有一个数据框 df(+/- 331000 个观测值,有 4 个变量)和 Date(格式范围 = "%Y-%m-%d"),ID(因子19 级)、Station(18 级因子)和Presence(1/0)。
数据框的设置方式是,每个ID 的每个Station 都有一个日期范围(超过近三年的时间),以及在特定日期是否有人在场(1/0)一个特定的车站。
如果根据日期和 ID 对 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 的行,例如Fred 在2016 年1 月6 日在Station4、Station9 和Station 15)。但是如果组内没有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) %>%
但是,我不知道如何从那里着手。我不知道如何处理对比条件。
【问题讨论】:
-
寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。制作一个较小的数据集,我们可以复制/粘贴到 R 中进行测试。您可能只需要一个 group_by 和一个
any(Presence==1) & (Presence==0)来删除行。
标签: r