按R中的两个条件过滤数据帧

按R中的两个条件过滤数据帧,r,dplyr,R,Dplyr,我有一个数据框,其中包含给定年份内气候站的最高和最低温度-All.Stationsdataset: Station.Name Year Month Day TMAX TMIN GRAND MARAIS 1942 7 28 82 60 GRAND MARAIS 1962 3 17 42 22 LEECH LAKE 1956 7 3 72 50 ALBE

我有一个数据框,其中包含给定年份内气候站的最高和最低温度-
All.Stations
dataset:

Station.Name    Year    Month   Day TMAX    TMIN
GRAND MARAIS    1942    7       28    82      60
GRAND MARAIS    1962    3       17    42      22
LEECH LAKE      1956    7       3     72      50
ALBERT LEA 3 SE 1998    1       25    25      15
TWO HARBORS     1933    5       20    77      42
ARGYLE          1922    9       13    NA      NA
Station.Name    Year
DULUTH          1904
AGASSIZ REFUGE  1995
LEECH LAKE      1956
GRAND MARAIS    1942
LEECH LAKE      1994
我还有一个按气候站划分的完整年份的数据框架(即,我有一年中每天数据的年份)
complete.years
dataset:

Station.Name    Year    Month   Day TMAX    TMIN
GRAND MARAIS    1942    7       28    82      60
GRAND MARAIS    1962    3       17    42      22
LEECH LAKE      1956    7       3     72      50
ALBERT LEA 3 SE 1998    1       25    25      15
TWO HARBORS     1933    5       20    77      42
ARGYLE          1922    9       13    NA      NA
Station.Name    Year
DULUTH          1904
AGASSIZ REFUGE  1995
LEECH LAKE      1956
GRAND MARAIS    1942
LEECH LAKE      1994
我希望将第一个数据帧过滤为仅存在站点名称和年份的数据,并在第二个数据帧中进行匹配

正确的结果是:

Station.Name    Year TMAX
GRAND MARAIS    1942   82
LEECH LAKE      1956   72
以下是到目前为止我使用dplyr得到的结果:

Max.Tempurature <- All_Stations %>% 
  group_by(Station.Name, Year) %>%
  select(Station.Name, Year, TMAX) %>%
  filter(min_rank(desc(TMAX)) <= 1) %>%
  filter((Year %in% complete.years$Year & Station.Name %in% complete.years$Station.Name))
最大温度%
分组依据(车站名称,年份)%>%
选择(Station.Name、Year、TMAX)%>%
过滤器(最小秩(描述(TMAX))%
筛选器((完成百分比中的年份%。年数$年和站名%(完成百分比中的年份$站名))
我可以按年份和Station.Name进行过滤,但这会在整个数据框中搜索匹配项


如何按同一观测中存在的站点、名称和年份进行筛选?

我们可以进行
内部联接

library(dplyr)
inner_join(All.Stations[c(1, 2, 5)], complete.years)
#   Station.Name Year TMAX
#1 GRAND MARAIS 1942   82
#2   LEECH LAKE 1956   72
数据
All.Stations或与
合并

cols <- c('Station.Name', 'Year', 'TMAX')
merge(All.Stations[cols], complete.years, all.x = FALSE)
#  Station.Name Year TMAX
#1 GRAND MARAIS 1942   82
#2   LEECH LAKE 1956   72

cols您还可以进行
semi_连接
,因为所有感兴趣的信息都在all.Stations中,而其他数据仅用于确定要包括哪些情况。
all.Stations%>%semi_连接(complete.years,by=c(“Station.Name”,“Year”)%%>%select(Station.Name,Year,TMAX)
这两种方法都有效,谢谢你们!我最终使用了semi_-join,因为我只需要X中的列,为了简单起见,我在示例中排除了Y中的其他列。再次感谢!!肯定
内部_-join
是您的最佳选择。请参阅@akrun的答案