【问题标题】:Filter on groups where where at the max value of one variable, another variable equals a particular value过滤在一个变量的最大值处,另一个变量等于特定值的组
【发布时间】:2020-06-25 18:20:23
【问题描述】:

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

我有这样的数据:

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 解决方案。谢谢!

【问题讨论】:

    标签: r filter dplyr data.table grouping


    【解决方案1】:

    由于它已经分组,只需通过检查对应于当天最大值 (which.max(day)) 的“值”是否为 1 来应用 filter

    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)))
    

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2015-03-19
      • 1970-01-01
      • 2019-09-01
      • 2021-06-17
      • 2015-02-23
      相关资源
      最近更新 更多