r - 创建一个函数来过滤 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
如何优化我的代码?我认为我需要循环或映射,但这是我第一次这样做。
解决方案
您可以为每个唯一值拆分数据集,Place
并Year
用于为每个组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))
推荐阅读
- html - 让 CSS 网格行填充可用空间
- javascript - CORS 阻止的来源 - 来源和允许的来源相同
- java - MD5 哈希 Java 测验
- qt - QML Gauge如何制作初始值?
- mongodb - 将数据库从 robo3t 迁移到 MongoDB Atlas
- android - 无论用户选择取消还是安装,如何从应用更新弹出窗口中获取回调
- javascript - 当我单击任何美国州地图时,fusionchart 中另一部分的图表过滤器
- regex - 正则表达式从请求 id 中提取文本
- html - 如何解决手机上的 iframe 高度问题
- python - 从 VBA 运行 Python 脚本不起作用