【问题标题】:How to return a value of a column that is associated with the max(date) in R?如何返回与 R 中的最大(日期)关联的列的值?
【发布时间】:2022-12-09 02:31:11
【问题描述】:

我正在寻找一个答案,以找到与最大日期相关联的值,该最大日期也与 R 中的 id 值相关联。数据框看起来像

id value date
1 A 12/12/2021
1 B 12/13/2021
1 A 12/14/2021
2 A 12/13/2021
2 C 12/07/2021
2 B 12/17/2021
3 C 12/13/2021
3 B 12/06/2021
3 C 12/02/2021

代码应返回:

id value date max_value
1 A 12/12/2021 A
1 B 12/13/2021 A
1 A 12/14/2021 A
2 A 12/13/2021 B
2 C 12/07/2021 B
2 B 12/17/2021 B
3 C 12/13/2021 C
3 B 12/06/2021 C
3 C 12/02/2021 C

我尝试了以下并收到错误。

df <- df[!is.na(df$date),]
    for(ID in unique(df$id)){
      as.data.frame(df %>% filter(id == ID) %>% dplyr::mutate(max_value = ifelse(df$date == max(df$date, na.rm = T), df$value, df$value[df$date == max(df$date, na.rm = T) & df$id == ID])))
    }

【问题讨论】:

    标签: r dataframe datetime dplyr filter


    【解决方案1】:

    尝试以下dplyr 方法:

    xx %>% group_by(id) %>%
      mutate(max = value[date == max(date)])
    

    输出:

    #      id value date       max  
    # <int> <chr> <chr>      <chr>
    # 1     1 A     12/12/2021 A    
    # 2     1 B     12/13/2021 A    
    # 3     1 A     12/14/2021 A    
    # 4     2 A     12/13/2021 B    
    # 5     2 C     12/07/2021 B    
    # 6     2 B     12/17/2021 B    
    # 7     3 C     12/13/2021 C    
    # 8     3 B     12/06/2021 C    
    # 9     3 C     12/02/2021 C 
    

    【讨论】:

      【解决方案2】:

      找到每个最大值的一种可能解决方案ID在数据框中是使用dplyr包和通过...分组变异功能。这通过...分组函数按以下方式对数据框进行分组ID专栏,以及变异函数创建一个新列最大值包含每个组的最大值。

      library(dplyr)
      
      df <- df %>%
        group_by(id) %>%
        mutate(max_value = value[which.max(date)])
      

      或者,您可以使用数据表包和经过[.SD, which.max]功能。这经过函数按以下方式对数据帧进行分组ID专栏,以及[.SD, which.max]函数查找每个组中最大日期的索引。然后,使用功能,您可以创建一个新列最大值其中包含每个索引的相应值。

      library(data.table)
      
      df <- setDT(df)[, max_value := value[.SD, which.max], by = id]
      

      运行上述任一代码后,生成的数据帧应具有所需的输出。

      【讨论】:

        猜你喜欢
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 2022-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多