【问题标题】:Obtain a variable mean for a time period获取一段时间内的变量均值
【发布时间】:2021-12-01 22:30:40
【问题描述】:

我的分析受阻

我有一个像这样的数据集:

Date Light
2019-02-15 01:00:00 0.134
2019-02-15 02:00:00 0.345
2019-02-15 03:00:00 0.567
2019-02-15 04:00:00 0
2019-02-15 05:00:00 0.100
... ...
2019-03-10 15:00:00 0.890
... ...

这是一个包含大量日期的大型数据集。而且我正在尝试获得不同时间段的光平均值:日平均值; 5天平均值; 1 周平均值(过去 4 天 + 今天;过去 6 天 + 今天和每日平均值)

我想要的结果就像这个数据集:

Date Light timeperiod_5days timeperiod_1week timeperiod_24h

我尝试使用不同的功能:timeAverage; xts。但我无法得到任何结果,我不知道它们是否适合我想要的。

有人知道我如何获得我的结果吗?

提前致谢!

【问题讨论】:

  • 你好,我每天都想要

标签: r dataframe datetime time period


【解决方案1】:

我不确定您所期望的结果。您有可以分享的部分或全部代码吗?

我有一些东西可以作为一个开始。

data = read.csv(file = "data",header = T,sep = ",")
data$Date = as.POSIXct(data$Date , format = "%Y-%m-%d %H:%M:%S" ) #to make date as date in R 
data$Day = format(data$Date,"%Y-%m-%d") #to extract only the day

# Aggregation
tab_A  = aggregate(x=data[,-c(1,2,3)], by=list(A=data$Day), FUN=mean , na.rm = T) # Whith that you can get the daily mean of your data base

如果您找到一种方法来通过周数描述 R 中的“周”,例如,您可以按每年的周汇总。

至于过去 4 天 + 今天,您可以简单地说:

mean(data$Light[(length(data$Light)-5):length(data$Light)])

【讨论】:

    【解决方案2】:

    不确定“24h”是指“今天”还是“过去 24 小时”,在第一种情况下,您的最终代码将如下所示:

    library(dplyr)
    library(lubridate)
    
    rollmean <- function(i,window){
      startdate <- as.Date(df$Date[i])-days(window-1)
      enddate <- as.Date(df$Date[i])+1
      
      tmp <- df %>% filter(between(as.Date(Date), startdate, enddate))
      return(mean(tmp$Light))
    }
    
    for (i in 1:nrow(df)) {
      df[i, "timeperiod_24h"] <- rollmean(i, 1)
      df[i, "timeperiod_5d"] <- rollmean(i, 5)
      df[i, "timeperiod_7d"] <- rollmean(i, 7)
    }
    

    结果:

                     Date Light timeperiod_24h timeperiod_5d timeperiod_7d
    1 2019-02-15 01:00:00 0.134         0.2292        0.2292        0.2292
    2 2019-02-15 02:00:00 0.345         0.2292        0.2292        0.2292
    3 2019-02-15 03:00:00 0.567         0.2292        0.2292        0.2292
    4 2019-02-15 04:00:00 0.000         0.2292        0.2292        0.2292
    5 2019-02-15 05:00:00 0.100         0.2292        0.2292        0.2292
    6 2019-02-17 05:00:00 0.300         0.3000        0.2410        0.2410
    7 2019-03-10 15:00:00 0.890         0.8900        0.8900        0.8900
    

    如果您想要“过去 24 小时”,则将 as.Dates 放在函数中并稍微更改舍入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多