如果组中的一个特定条件为真,是否有办法删除属于该组的所有行?

Is there a way to delete all rows that belong to a group if one particular condition in the group is true?

我对每家公司都有一个唯一的标识符,其中包含每家公司在不同年份的观察结果。我需要弄清楚如果某年的金额超过一定金额(signalledyear),如何删除公司每年的观察值。

可能是这样的,不确定如何将其放入代码中?

%>% group_by(id, year) %>% filter(amount > 10 when year = signalledyear)

注意,signalledyear 也是数据框中的一列。

我们可以使用 any 删除任何行满足 year 等于 signalledyearamount 小于 10 的条件的整组。

library(dplyr)

df %>% 
  group_by(id) %>% 
  filter(!any(amount < 10 & year == signalledyear))

输出

     id  year signalledyear amount
  <dbl> <dbl>         <dbl>  <dbl>
1     1  2010          2011      5
2     1  2011          2011     14
3     1  2012          2011      5
4     1  2013          2011     12
5     1  2014          2011     12

数据

df <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2), year = c(2010, 
2011, 2012, 2013, 2014, 2010, 2011, 2012, 2013), signalledyear = c(2011, 
2011, 2011, 2011, 2011, 2010, 2010, 2010, 2010), amount = c(5, 
14, 5, 12, 12, 6, 9, 12, 14)), class = "data.frame", row.names = c(NA, 
-9L))

#   id year signalledyear amount
# 1  1 2010          2011      5
# 2  1 2011          2011     14
# 3  1 2012          2011      5
# 4  1 2013          2011     12
# 5  1 2014          2011     12
# 6  2 2010          2010      6
# 7  2 2011          2010      9
# 8  2 2012          2010     12
# 9  2 2013          2010     14