【问题标题】:For every unique value in column find the min 4 dates对于列中的每个唯一值,找到最少 4 个日期
【发布时间】:2018-10-29 05:21:36
【问题描述】:

我正在尝试查找列中每个唯一值的最少 4 个日期,并取这 4 个日期的平均值。

例如

ID      Date      Value
aa1    1/1/2006    5
aa1    2/1/2007    4
aa1    3/2/2005    7
aa1    1/20/1998   10
aa1    5/3/2001    9
aa1    7/4/2010    10
aa2n   4/3/2002    5
aa2n   4/5/2002    6
aa2n   6/30/2011   7
aa2n   6/21/2012   5
aa2n   1/5/1998    3

我想输出为

ID     Avg Value
aa1      7.75
aa2n     5.25

【问题讨论】:

    标签: r loops


    【解决方案1】:

    我们将 'Date' 转换为 Date 类,arrange by 'Date' 并获得按 'ID' 分组的前 4 个 'Value' 的 mean

    library(dplyr)
    library(lubridate)
    df1 %>% 
      group_by(ID) %>% 
      arrange(mdy(Date)) %>%
      summarise(Value = mean(head(Value, 4)))
    # A tibble: 2 x 2
    #  ID    Value
    #   <chr> <dbl>
    #1 aa1    7.75
    #2 aa2n   5.25
    

    或者我们可以使用data.table 来做到这一点

    library(data.table)
    setDT(df1)[order(mdy(Date)),.(Value = mean(head(Value, 4))), ID]
    #     ID Value
    #1: aa2n  5.25
    #2:  aa1  7.75
    

    【讨论】:

      【解决方案2】:

      您可以使用 dplyr::top_nn=-4 来选择至少 4 个日期的记录。使用dplyr::summarise 计算meanValue

      library(dplyr)
      library(lubridate)
      
      df %>% mutate(Date = mdy(Date)) %>%
        group_by(ID) %>%
        top_n(-4, Date) %>%    #Last 4 records, ordered by Date
        summarise(AvgVal = mean(Value))
      
      # A tibble: 2 x 2
      #  ID    AvgVal
      #  <chr>  <dbl>
      #1 aa1     7.75
      #2 aa2n    5.25
      

      数据:

      df <- read.table(text = 
      "ID      Date      Value
      aa1    1/1/2006    5
      aa1    2/1/2007    4
      aa1    3/2/2005    7
      aa1    1/20/1998   10
      aa1    5/3/2001    9
      aa1    7/4/2010    10
      aa2n   4/3/2002    5
      aa2n   4/5/2002    6
      aa2n   6/30/2011   7
      aa2n   6/21/2012   5
      aa2n   1/5/1998    3",
      stringsAsFactors = FALSE, header = TRUE)
      

      【讨论】:

        猜你喜欢
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2018-11-23
        • 2020-03-08
        • 2021-02-03
        • 2018-08-05
        • 1970-01-01
        相关资源
        最近更新 更多