gpt4 book ai didi

r - 按 R 中的两个条件过滤数据框

转载 作者:行者123 更新时间:2023-12-04 11:31:16 26 4
gpt4 key购买 nike

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

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

我还有气候站的完整年份数据框(即,这些年份是我一年中每一天的数据)- complete.years 数据集:

Station.Name    Year
DULUTH 1904
AGASSIZ REFUGE 1995
LEECH LAKE 1956
GRAND MARAIS 1942
LEECH LAKE 1994

我想将第一个数据框过滤为仅存在 Station Name 和 Year 并在第二个数据框中匹配的数据。

正确的结果应该是:

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))

我可以同时按 Year 和 Station.Name 进行过滤,但这会在整个数据框中搜索匹配项。

如何按同一观测中存在的 Station.Name 和 Year 进行过滤?

最佳答案

我们可以做一个inner_join

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 <- structure(list(Station.Name = c("GRAND MARAIS", "GRAND MARAIS", 
"LEECH LAKE", "ALBERT LEA 3 SE", "TWO HARBORS", "ARGYLE"), Year = c(1942L,
1962L, 1956L, 1998L, 1933L, 1922L), Month = c(7L, 3L, 7L, 1L,
5L, 9L), Day = c(28L, 17L, 3L, 25L, 20L, 13L), TMAX = c(82L,
42L, 72L, 25L, 77L, NA), TMIN = c(60L, 22L, 50L, 15L, 42L, NA
)), class = "data.frame", row.names = c(NA, -6L))

complete.years <- structure(list(Station.Name = c("DULUTH",
"AGASSIZ REFUGE", "LEECH LAKE",
"GRAND MARAIS", "LEECH LAKE"), Year = c(1904L, 1995L, 1956L,
1942L, 1994L)), class = "data.frame", row.names = c(NA, -5L))

关于r - 按 R 中的两个条件过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com