我们可以将列转换为 Date 类,将year 作为单独的列,将slice 和max 行分组
library(dplyr)
library(lubridate)
df1 %>%
group_by(year = year(mdy(Year))) %>%
slice_max(n = 1, order_by = Discharge) %>%
ungroup
-输出
# A tibble: 2 x 3
Year Discharge year
<chr> <int> <dbl>
1 2/1/2013 45 2013
2 12/31/2020 80 2020
如果“年份”列中有多种格式,请使用 parse_date 中的 parsedate
library(parsedate)
df1 %>%
group_by(year = year(parse_date(Year))) %>%
slice_max(n = 1, order_by = Discharge) %>%
ungroup
更新
根据 cmets 中的 dput,“日期”列已经在 Date 类中
df1 %>%
group_by(year= year(Date)) %>%
slice_max(n = 1, order_by = Discharge, with_ties = FALSE) %>%
ungroup
-输出
# A tibble: 1 x 3
Date Discharge year
<date> <dbl> <dbl>
1 2018-06-07 0.0116 2018
数据
df1 <- structure(list(Year = c("1/1/2013", "2/1/2013", "12/31/2020"),
Discharge = c(23L, 45L, 80L)), class = "data.frame", row.names = c(NA,
-3L))