【问题标题】:Get the most recent observation using date variable in r使用 r 中的日期变量获取最新的观察结果
【发布时间】:2020-11-11 05:08:03
【问题描述】:

我正在使用 R 创建一个包含另一个表中的数据的表,我正在处理下一个变量:

-PRODUCT ID 
-CLASIFICATION
-DATE

例如我的原始表:

product id   Clasification   Date
10000567        B+         12-12-2020
10000123        C+         26-11-2020
10000567        A+         02-11-2020
10000222        A+         09-10-2020
10000123        B++        21-09-2020
10000222        A++        10-09-2020

问题是我需要获取我的产品 ID 的最新分类,因为它是一个动态字段,它可以随时更改。产品 ID 为一行。

任何帮助都会很棒。

谢谢!

【问题讨论】:

    标签: r dplyr partition


    【解决方案1】:

    您可以在dplyr 中使用slice_max()(取代1.0.0 之后的top_n())来选择最近的日期。

    df %>%
      mutate(Date = as.Date(Date, "%d-%m-%Y")) %>%
      group_by(product_id) %>%
      slice_max(Date, n = 1) %>% 
      ungroup()
    
    # # A tibble: 3 x 3
    #   product_id Clasification Date      
    #        <int> <chr>         <date>    
    # 1   10000123 C+            2020-11-26
    # 2   10000222 A+            2020-10-09
    # 3   10000567 B+            2020-12-12
    

    数据

    df <- structure(list(product_id = c(10000567L, 10000123L, 10000567L, 
    10000222L, 10000123L, 10000222L), Clasification = c("B+", "C+", 
    "A+", "A+", "B++", "A++"), Date = c("12-12-2020", "26-11-2020", 
    "02-11-2020", "09-10-2020", "21-09-2020", "10-09-2020")), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

    • 如果我的变量比我提到的 3 个变量多怎么办? (我需要在代码中包含“分类”)
    • @DiegoGonzalezAvalos Clasification 依赖于 product_idDate,因此它不需要包含在代码中。添加更多变量也没关系,因为其他变量不会影响Clasification
    【解决方案2】:

    假设您的日期未排序,应该可以使用以下方法:

    library(dplyr)
    df %>%
     arrange(desc(Date)) %>%
     group_by(id) %>%
     slice(1) %>%
     ungroup()
    

    【讨论】:

    • Date 不是标准的Date 对象格式,因此arrange() 将其作为字符并按字母顺序排序。例如。 26-11-2020大于2-12-2020,这是不合理的。
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2017-02-28
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多