首页 > 解决方案 > 创建一个函数来过滤 R 中的两列

问题描述

我已经在 4 个不同的地方和 4 个不同的年份复制了这段代码。

df1 <- df %>% filter(Place == "Al" & year==2016)
rollingMean(df1, pollutant = "O", hours=8, new.name = "mean", data.thresh=75)

数据样本:

Place       O    date_time               year
Al          23  2016-01-01 01:00:00     2016
Al          15  2016-01-01 02:00:00     2016
Al          18  2016-01-01 03:00:00     2016
Al          18  2016-01-01 04:00:00     2016
Al          20  2016-01-01 05:00:00     2016
Al          21  2016-01-01 06:00:00     2016
Ar          23  2016-01-01 01:00:00     2016
Ar          15  2016-01-01 02:00:00     2016
Ar          18  2016-01-01 03:00:00     2016
Ar          18  2016-01-01 04:00:00     2016
Ar          20  2016-01-01 05:00:00     2016
Ar          21  2016-01-01 06:00:00     2016
Ma          23  2016-01-01 01:00:00     2016
Ma          15  2016-01-01 02:00:00     2016
Ma          18  2016-01-01 03:00:00     2016
Ma          18  2016-01-01 04:00:00     2016
Ma          20  2016-01-01 05:00:00     2016
Ma          21  2016-01-01 06:00:00     2016
Ss          23  2016-01-01 01:00:00     2016
Ss          15  2016-01-01 02:00:00     2016
Ss          18  2016-01-01 03:00:00     2016
Ss          18  2016-01-01 04:00:00     2016
Ss          20  2016-01-01 05:00:00     2016
Ss          21  2016-01-01 06:00:00     2016

如何优化我的代码?我认为我需要循环或映射,但这是我第一次这样做。

标签: rloopsoptimization

解决方案


您可以为每个唯一值拆分数据集,PlaceYear用于为每个组map运行 rollingMean函数并将它们组合到一个数据帧中。

library(dplyr)
library(purrr)

result <- df %>%
            group_split(Place, Year) %>%
            map_df(~rollingMean(.x, pollutant = "O", hours=8, 
                                new.name = "mean", data.thresh=75)) 

推荐阅读