过滤并返回特定行满足一个条件的组的所有行

时间:2018-04-09 11:41:36

标签: r dplyr

我希望过滤并检索特定行符合条件的所有组中的所有行,在我的示例中,当每个组的最高日期值超过3时。这显然是简化的,但将其分解为必要的。

# Dummy data
id = rep(letters[1:3], each =  3)
day = rep(1:3, 3)
value = c(2,3,4,2,3,3,1,2,4)
my_data = data.frame(id, day, value, stringsAsFactors = FALSE)

我的方法有效,但似乎有些不太明智:

require(dplyr)
foo <- my_data %>%
         group_by(id) %>% 
         slice(which.max(day)) %>% # gets the highest day
         filter(value>3)           # filters the rows with value >3

## semi_join with the original data frame gives the required result: 

semi_join(my_data, foo, by = 'id')
  id day value
1  a   1     2
2  a   2     3
3  a   3     4
4  c   1     1
5  c   2     2
6  c   3     4

有没有更简洁的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

my_data %>% group_by(id) %>% filter(value[which.max(day)] > 3)