【问题标题】:Calculate weekly mean from time series with missing data in R从 R 中缺少数据的时间序列计算每周平均值
【发布时间】:2016-12-25 10:20:16
【问题描述】:

我有一个时间序列对象,它具有从 19 世纪开始到 20 世纪的每日值。那里有很多缺失的值。

我正在尝试计算每周平均值,这是一个最小的示例:

library(zoo)
library(xts)

# Create time series that starts in 19th century
T <- 100 # number of days
myTS <- xts(rnorm(T), as.Date(1:T, origin="1899-11-05"))

# Insert some missing values
myTS[4:7] <- NA
myTS[33:34] <- NA
myTS[67:87] <- NA

# Try calculating weekly means
weekData <- apply.weekly(myTS, colMeans, na.rm = TRUE)

仅返回上周的每周平均值:

1900-02-13 [一些价值]

我使用colMeans 而不仅仅是mean,因为我正在处理一个包含多个变量的更大数据集。

我想要所有星期的平均值。有人知道我做错了什么吗?

【问题讨论】:

    标签: r dataframe time-series xts missing-data


    【解决方案1】:

    根据您的评论更新为使用周-年组合:

    library(zoo)
    library(xts)
    
    # Create time series that starts in 19th century
    T <- 100 # number of days
    myTS  <- xts(rnorm(T), as.Date(1:T, origin="1899-11-05"))
    
    # Insert some missing values
    myTS[4:7] <- NA
    myTS[33:34] <- NA
    myTS[67:87] <- NA
    
    # Let's use a flexible class
    myTS <- data.frame(dates=index(myTS),v1=myTS[,1])
    
    # Here's an easy way to transform dates to weeks
    require(lubridate)
    week_num <- week(myTS[,1])
    year_num <- year(myTS[,1])
    week_yr  <- paste(week_num, year_num)
    
    # Weekly means
    aggregate(myTS$v1,by=list(week_yr),mean,na.rm=T)
    
       Group.1           x
    1   1 1900  0.05405322
    2   2 1900  0.31981319
    3   3 1900         NaN
    4   4 1900         NaN
    5  45 1899  0.85081053
    6  46 1899  0.34064255
    7  47 1899  0.02880424
    8  48 1899 -0.34408119
    9  49 1899 -0.38089026
    10  5 1900  0.62292188
    11 50 1899 -0.59666955
    12 51 1899  0.57756987
    13 52 1899 -0.41325485
    14 53 1899  0.88013634
    15  6 1900  0.01514668
    16  7 1900 -0.50863942
    

    【讨论】:

    • 对不起,我想要的不是第 1 周跨年的平均值,第 2 周跨年的平均值等等。但我想要这几周的平均值。所以 week1_1899, week2_1899, ..., week52_1900, week53_1900.
    • 太棒了,完成了这项工作!
    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多