r - 过滤组,其中一个变量的最大值,另一个变量等于特定值

标签 r filter dplyr data.table grouping

我想过滤在一个变量的最大值处另一个变量等于特定值的组。

我有这样的数据:

library(tidyverse)
df1 <- data.frame(grp = rep(letters[1:2],each=5),
                      day = 1:5,
                     value = c(0,5,7,1,1,5,8,5,3,0)) %>% 
group_by(grp)

   grp day value
1    a   1     0
2    a   2     5
3    a   3     7
4    a   4     1
5    a   5     1
6    b   1     5
7    b   2     8
8    b   3     5
9    b   4     3
10   b   5     0

我想过滤最大(天)值等于 1 的组。

所以输出看起来像这样:

  grp     day value
1 a         1     0
2 a         2     5
3 a         3     7
4 a         4     1
5 a         5     1

欢迎使用 Data.table 或 dplyr 解决方案。谢谢!

最佳答案

因为它已经分组,只需应用 filter 来检查与日期最大值 (which.max(day)) 对应的“值”是否为 1

library(dplyr)
df1 %>%
    filter(value[which.max(day)] ==1)
# A tibble: 5 x 3
# Groups:   grp [1]
#  grp     day value
#  <fct> <int> <dbl>
#1 a         1     0
#2 a         2     5
#3 a         3     7
#4 a         4     1
#5 a         5     1

或者有两个条件并用any包裹

df1 %>% 
      filter(any(value ==1 & day == max(day)))

关于r - 过滤组,其中一个变量的最大值,另一个变量等于特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60675454/

相关文章:

R:从矩阵中提取一个圆

根据R中的另一列删除重复日期

r - 将多个参数传递给 dplyr::summarise_if 中的函数

r - R 中的嵌套匹配函数

r - 控制 R 中枢轴的细节级别 (tidyverse)

r - 绘制两个时间序列 : axis issue

r - 在没有公共(public)变量的情况下执行 dplyr full_join 以混合数据帧

ios - 从使用 Mirror 创建的字典中过滤 nil 值

javascript - 用于过滤 Angular 滑动条值

jQuery 按属性值过滤