按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的答案