根据互惠条件对数据框进行子集化

Subset a dataframe based on reciprocity conditions

我有以下数据帧结构

date latitude
1951-03-22 66.08106
1951-03-22 59.59117
1951-04-08 59.59117
1952-10-20 55.41972
1960-08-12 66.05653
1960-09-10 66.08106

我想做的是:select 所有唯一纬度的行,如果有 2 个(或更多)完全相同的纬度,我只想保留最早日期的那个 但每年.

因此,对于我之前的示例,它将给出以下子集,而不仅仅是第 3 行:

date latitude
1951-03-22 66.08106
1951-03-22 59.59117
1952-10-20 55.41972
1960-08-12 66.05653
1960-09-10 66.08106

非常感谢您的帮助。

PS:也许重要的是要明确 class(df$date) 是“日期”并且 class(df$latitude) 是“数字”。

从'date'中提取的'latitude'和year分组,使用slice_max提取具有最大日期的行,然后删除'year'列

library(dplyr)
library(lubridate)
df1 %>%    
    # grouped by latitude, and year extracted from Date class 
    # year is from lubridate
    group_by(latitude, year = year(date)) %>% 
    # slice 1 row from each group, ordered by the 'date' column
    slice_max(n = 1, order_by = date) %>%
    # remove the grouping
    ungroup %>%
    # remove the year column
    select(-year) %>%
    arrange(date)

-输出

# A tibble: 5 × 2
  date       latitude
  <chr>         <dbl>
1 1951-03-22     66.1
2 1951-04-08     59.6
3 1952-10-20     55.4
4 1960-08-12     66.1
5 1960-09-10     66.1