【问题标题】:Filter a data frame groupwise in R using dplyr使用 dplyr 在 R 中按组过滤数据框
【发布时间】:2021-02-27 00:06:44
【问题描述】:

我有一个数据框 (precipitation),其中的列将不同的分组变量与每个样本(时间序列中的点)相关联:

    Date                Precipitation  Year     Month       Season
    <S3: POSIXct>       <dbl>          <dbl>    <ord>       <fctr>
1   1970-12-31 18:00:00 0.1900503      1970     December    Autumn
2   1971-01-01 18:00:00 0.4749126      1971     January     Winter
3   1971-01-02 18:00:00 6.1823234      1971     January     Winter
4   1971-01-03 18:00:00 2.7953697      1971     January     Winter
5   1971-01-04 18:00:00 2.6522014      1971     January     Winter
6   1971-01-05 18:00:00 8.7417027      1971     January     Winter

我想根据多个阈值分组过滤此数据框,按分组计算。阈值汇总在生成的数据框中,如下所示:

percentile <- groupwisePercentile(Precipitation ~ Season, data = precipitation, tau = 0.9)
percentile

Season  n      tau    Percentile
<fctr>  <int>  <dbl>  <dbl>
Autumn  4509   0.9    5.19  
Spring  4520   0.9    3.47  
Summer  4508   0.9    6.01  
Winter  4513   0.9    4.32  

我不知道如何引用此数据框中的值来过滤数据框precipitation groupwise,例如在 dplyr 中使用group_by 后跟filter。现在我正在使用一种非常不优雅的方法,当涉及到具有更多级别的分组时,这种方法也非常费力:我将过滤后的表的子集连接起来,手动输入来自数据框percentile 的值,如下所示:

filtered_winter <- precipitation %>%
  filter(Season == "Winter") %>%
  filter(Precipitation >= 4.32)

那对于每个组,然后我绑定它们:

events <- rbind(filtered_winter,filtered_spring,filtered_summer,filtered_autumn)

如何使用优雅的方法生成相同的表,按组过滤,每个组具有不同的阈值?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以尝试使用fuzzy_join 包。

    获取groupwisePercentile 结果和数据,您可以在两个数据框中链接Season,并在汇总阈值数据中将Precipitation&gt;= 连接到Percentile

    library(rcompanion)
    library(fuzzyjoin)
    
    summary_df <- groupwisePercentile(Precipitation ~ Season, data = precipitation, tau = 0.9)
    
    fuzzy_inner_join(precipitation, 
                    summary_df,
                    by = c("Season" = "Season",
                           "Precipitation" = "Percentile"),
                    match_fun = list(`==`, `>=`))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多