【问题标题】:Calculate mean based on time horizons根据时间范围计算平均值
【发布时间】:2018-02-28 19:12:58
【问题描述】:

考虑到以下 data.frame,我想计算 2011-01-03 和 2011-01-06 之间的平均值:

             GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume
2011-01-03    297.94    302.49   297.94     301.87          NA
2011-01-04    302.51    302.79   299.76     300.76          NA
2011-01-05    299.73    304.86   299.72     304.23          NA
2011-01-06    305.03    308.91   304.72     306.44          NA

代码mean(data$GOOG.Open, seq(from=01/03/11, to=01/06/11)) 的结果给了我529.8661,实际上是在引用数据框中的不同值。你知道如何计算平均值吗?

【问题讨论】:

    标签: r dataframe range subset mean


    【解决方案1】:

    首先,您需要定义数据的存储方式,请参阅:How to make a great R reproducible example?

    我在tidyverse 包中使用dplyr 来分析数据,并使用lubridate 来定义日期格式。这假设您希望能够改变平均日期。

    library(tidyverse)
    library(lubridate)
    
    dat <- data.frame(date = c('2011-01-03','2011-01-04','2011-01-05','2011-01-06'), 
                      GOOG.Open = c(297.94,302.51,299.73,305.03))
    dat %>% 
        mutate(date = format(ymd(date))) %>% 
        filter(date>='2011-01-03' & date<='2011-01-06') %>% 
        summarise(goog_mean = mean(GOOG.Open))
    

    如果您只想要所呈现数据的平均值,您可以使用:

    mean(dat$GOOG.Open) 
    

    dat %>% 
        summarise(mean = mean(GOOG.Open))
    

    【讨论】:

    • 很好,感谢您的提示。我正在从谷歌下载数据,“日期”实际上是行名。如果它们不是列而是行名,您知道如何引用这些日期吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 2020-06-05
    • 2019-11-09
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多