如果组中的一个特定条件为真,是否有办法删除属于该组的所有行?
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
等于 signalledyear
且 amount
小于 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
我对每家公司都有一个唯一的标识符,其中包含每家公司在不同年份的观察结果。我需要弄清楚如果某年的金额超过一定金额(signalledyear
),如何删除公司每年的观察值。
可能是这样的,不确定如何将其放入代码中?
%>% group_by(id, year) %>% filter(amount > 10 when year = signalledyear)
注意,signalledyear
也是数据框中的一列。
我们可以使用 any
删除任何行满足 year
等于 signalledyear
且 amount
小于 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