我希望过滤并检索特定行符合条件的所有组中的所有行,在我的示例中,当每个组的最高日期值超过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
有没有更简洁的方法来做到这一点?
答案 0 :(得分:2)
my_data %>% group_by(id) %>% filter(value[which.max(day)] > 3)