【问题标题】:Calculate daily average from irregular hourly data using xts使用 xts 从不规则的每小时数据计算每日平均值
【发布时间】:2017-01-03 16:20:57
【问题描述】:

我有两列数据集:DateOzone。时间序列是不规则的每小时数据,我需要计算每日平均数据。

我的问题是最终文件只有一个值,而不是整个 Ozone 列。我尝试了几个不同的版本,但我无法解决问题。

dataset1 <- structure(list(Date = structure(1:3, .Label = c("7/11/2013 18:33",
  "7/11/2013 18:34", "7/11/2013 18:35"), class = "factor"), ozone = c(40.7, 40.4,
  40.9)), .Names = c("Date", "ozone"), row.names = c(NA, 3L), class = "data.frame")
#convert dataframe to xts object
library(xts)
xt1 <- xts(dataset1[,-1],
           order.by = as.POSIXct(dataset1$Date, format= "%m/%d/%Y %H:%M"))
x_updated <- apply.daily(xt1, colMeans)
#convert back the dataset to data.frame
write.csv(as.data.frame(x_updated), file="daily")

【问题讨论】:

  • @DarshanBaral 当然,dataset1

标签: r xts


【解决方案1】:

这里是 dplyr 解决方案:

library(dplyr)

df2 <- dataset1 %>% 
     mutate(date2 = as.Date(dataset1$Date)) %>% 
     group_by(date2) %>% 
     mutate(avg_ozone = mean(ozone)) %>%
     select(Date, ozone, avg_ozone)

【讨论】:

  • 感谢您提供这个替代解决方案!
【解决方案2】:
# Get 'day' from 'datetime'
# dataset1$day = as.POSIXct(dataset1$Date, format='%d/%m/%Y') # Apparently this caused problem
dataset1$day = do.call(rbind, strsplit(as.character(dataset1$Date)," "))[,1]

# Get Daily Averages
daily_averages = aggregate(ozone~day, dataset1, mean)

【讨论】:

  • 我刚刚意识到这种方法没有给出正确的解决方案,日期参差不齐。例如,原始文件中的第一个日期是 11.7.2013,平均每日数据从 01.08.2013 开始。
  • 我是这样解决的:day = as.POSIXct(dataset1$Date, format="%m/%d/%Y") daily
【解决方案3】:

在您的可重现示例中没有任何内容向我表明您的输出存在问题(在我更正了您的 as.POSIXct 调用的 format 参数中的拼写错误之后——它最初是 "%m\%d\%y %H:%M")。也就是说,您的示例只有一天的数据,因此文件中应该只有一行输出。

这是一个可重现的示例,显示“每日”文件将包含多个观察结果。

# re-create example data
set.seed(21)
Data <- data.frame(Date=seq(ISOdate(2017, 1, 1), ISOdate(2017, 1, 3), by="hours"))
Data$Ozone <- rnorm(NROW(Data))
Data$Date <- format(Data$Date, "%m/%d/%Y %H:%M")
# convert to xts
library(xts)
xt1 <- xts(Data[,-1], as.POSIXct(Data$Date, format="%m/%d/%Y %H:%M"))
x_updated <- apply.daily(xt1, colMeans)
# convert to data.frame
write.csv(as.data.frame(x_updated))
# "","V1"
# "2017-01-01 23:00:00",0.038108046611944
# "2017-01-02 23:00:00",-0.0380170075916872
# "2017-01-03 12:00:00",0.612294079665861

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 2021-06-26
    • 2023-03-06
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多