首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中基于日期和时间的移动平均计算方法

R中基于日期和时间的移动平均计算方法
EN

Stack Overflow用户
提问于 2021-02-18 22:35:06
回答 2查看 264关注 0票数 0

我上传了数据。https://filebin.net/a29fn87b8wpfnos0/Plume_2.csv?t=iouc5vg7

它看起来像csv文件格式的

我试着寻找一个适合我的数据的正确答案。我找不到它,我花了大约一个月的时间来解决它。

首先,我需要做一个移动平均值:

  • 30分钟
  • 1小时
  • 1天
  • 1周

F 211

每PM2.5,PM10,NO2

但是,我不能手动使用这种类型的代码:

代码语言:javascript
复制
Plume_2$PM2.5_30min_ <- TTR ::SMA(Plume_2$pm2.5, n=31)
Plume_2$PM2.5_1hour_ <- TTR ::SMA(Plume_2$pm2.5, n=61)
Plume_2$PM2.5_1day_ <- TTR ::SMA(Plume_2$pm2.5, n=1441)
Plume_2$PM2.5_1week_ <- TTR ::SMA(Plume_2$pm2.5, n=10080)

使用这些代码,n值不符合我的日期。

也使用了这段代码,看起来一般情况下效果不佳。

代码语言:javascript
复制
library(runner)
dates = Plume_2$timestamp
value = Plume_2$PM2.5_Plume2

Plume_2$MA <-  mean_run(x = value, k = 7, lag = 1, idx = as.Date(dates))

最后的输出将是一个包含这些不同移动平均线的图表。

有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-19 05:30:27

我希望这是一个令人满意的解决方案。

代码语言:javascript
复制
library(data.table)
dt <- fread("https://filebin.net/a29fn87b8wpfnos0/Plume_2.csv?t=phgmlykh")
dt[,.(timestamp,
      PM2.5_30min_mean = frollmean(PM2.5_Plume2,31),
      PM2.5_1hour_mean = frollmean(PM2.5_Plume2,61),
      PM2.5_1day_mean = frollmean(PM2.5_Plume2, 1441),
      PM2.5_1week_mean = frollmean(PM2.5_Plume2,10080))]

结果显示为

然后,我想使用ggplot来绘制结果。这里我选择PM2.5_30min作为示例。

代码语言:javascript
复制
library(lubriate) # turn timestamp into POSIXct format with dmy_hm function
ggplot(dt2, aes(dmy_hm(timestamp), PM2.5_1hour_mean,na.rm = TRUE)) +
  geom_line() + 
  scale_x_datetime()
票数 1
EN

Stack Overflow用户

发布于 2021-02-20 02:47:32

使用动物园的rollmeanr函数和来自dplyracross可以帮助您完成这一任务。

代码语言:javascript
复制
library(dplyr)
library(zoo)

df <- read.csv('https://filebin.net/a29fn87b8wpfnos0/Plume_2.csv?t=up70ngy3')


df %>%
  mutate(across(PM2.5_Plume2:NO2_Plume2, 
               list(avg_30min = ~rollmeanr(.x, 30, fill = NA), 
                    avg_hour =  ~rollmeanr(.x, 60, fill = NA), 
                    avg_day =  ~rollmeanr(.x, 1440, fill = NA), 
                    avg_week =  ~rollmeanr(.x, 10080, fill = NA)))) -> result

result
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66269164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档