【问题标题】:How do I calculate average over time properly?如何正确计算一段时间内的平均值?
【发布时间】:2018-05-04 07:35:59
【问题描述】:

我正在处理一个住房数据集,并试图按年和月计算平均房价。

这是我尝试使用的代码行:

housing_data[,list(avg=mean(housing_data$price)), by = list(date(as.POSIXct(housing_data$date, format = "%Y-%m-%d")))]

但是,这是我的输出:

           date      avg
  1: 2004-04-11 612622.2
  2: 2005-07-17 612622.2
  3: 2003-06-01 612622.2
  4: 2004-01-18 612622.2
  5: 2006-01-29 612622.2
 ---                    
159: 2004-03-07 612622.2
160: 2005-08-14 612622.2
161: 2006-03-12 612622.2
162: 2005-10-23 612622.2
163: 2006-04-16 612622.2

我不明白我是如何错误地计算平均值的。另外,如何从数据中删除天数并仅从年/月计算平均值。

【问题讨论】:

  • 您可以将数据转换为xts 对象,然后使用apply.monthly(yourxtsobject, colMeans)
  • 您的数据集看起来像一个 data.table。那么也许housing_data[,list(avg=mean(price)), by=format(date, "%Y%m")]

标签: r lubridate


【解决方案1】:

这个怎么样?

library(dplyr)

df %>%
  group_by(month_year = format(date_col, "%Y-%m")) %>%
  summarise(value_avg = mean(value))

输出为:

  month_year value_avg
1 2018-05         14.5
2 2018-06         43.5
3 2018-07         59.5

样本数据:

df <- data.frame(date_col=seq.Date(as.Date("2018/5/4"), by="day", length.out = 60),
                 value = 1:60)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2019-08-01
    • 2021-08-05
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多