【问题标题】:Create a function to filter two columns in R创建一个函数来过滤 R 中的两列
【发布时间】:2021-04-28 14:52:48
【问题描述】:

我已经在 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

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

【问题讨论】:

  • 您是否需要针对地点和年份的每个组合(16 次迭代)或每对地点和年份(4 次迭代)运行代码?如果是前者,对 lapply 的嵌套调用将起作用。如果是后者,一次调用 mapply 就可以了。
  • 我需要结合地点和年份进行 16 次迭代,有什么想法吗?谢谢你

标签: r loops optimization


【解决方案1】:

您可以为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)) 

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2016-05-24
    • 2020-05-15
    • 1970-01-01
    • 2021-07-11
    • 2022-10-18
    相关资源
    最近更新 更多