重复观察平均每月

Posted

技术标签:

【中文标题】重复观察平均每月【英文标题】:repeated observations average per month 【发布时间】:2018-12-13 14:31:36 【问题描述】:

我有关于在某个时间段内使用个人 ID 购买每张收据的家庭的数据,其中周代码与常规整数一样。 我需要计算 4 周内每个家庭的收据数量。(数据超过 3 年;第一年 - 52 周,第二年 - 53,3d-48)。最终,我希望每个家庭每 4 周的平均购买次数。如果解决方案包括转换为月并按月计算,那也可以。数据集超过 100k 行。我对 R 很陌生,非常感谢所有建议!

Household<-c(1,2,3,1,1,2,2,2,3,1,3,3)
Week<-c(201501,201501,201501,201502,201502,201502,201502,201503,201503,201504,201504,201504)
Receipt<-c(111,112,113,114,115,116,117,118,119,120,121,121)
df<-data.frame(Household,Week,Receipt)

【问题讨论】:

你没有提到什么是有效的解决方案。请记住,100k 行并不多。到目前为止,您尝试过什么? 我是新手,所以没怎么尝试。我希望有一些我不知道的非常简单的解决方案! dplyr 包可以轻松处理此请求:library(dplyr); df %&gt;% group_by(Week, Household) %&gt;% summarize(n()) 这将帮助您入门,我建议您阅读与该包相关的小插图。 【参考方案1】:

这会计算每个家庭每 4 周的收据(行)数

library(data.table)
setDT(df)

n_reciepts <- df[, .N, by = .(Household, period = floor(Week/4))]
#    Household period N
# 1:         1  50375 3
# 2:         2  50375 4
# 3:         3  50375 2
# 4:         1  50376 1
# 5:         3  50376 2

那么你只需要在所有时期按家庭进行平均

avg_n_reciepts <- n_reciepts[, .(avg_reciepts = mean(N)), by = Household]


#    Household avg_reciepts
# 1:         1            2
# 2:         2            4
# 3:         3            2

你也可以一步完成

df[, .N, by = .(Household, period = floor(Week/4))
   ][, .(avg_reciepts = mean(N)), by = Household]


#    Household avg_reciepts
# 1:         1            2
# 2:         2            4
# 3:         3            2

dplyr 等效项:

library(dplyr)

df %>% 
  group_by(Household, period = floor(Week/4)) %>% 
  count %>% 
  group_by(Household) %>% 
  summarise(avg_reciepts = mean(n))

# # A tibble: 3 x 2
#   Household avg_reciepts
#       <dbl>        <dbl>
# 1         1            2
# 2         2            4
# 3         3            2

【讨论】:

非常感谢!

以上是关于重复观察平均每月的主要内容,如果未能解决你的问题,请参考以下文章

如何应用滚动平均函数,同时及时保持所有具有重复索引的观测值

R - 如何制作 n 个先前值的平均值/平均值,不包括当前观察值(滚动平均值)

Boxplot ggplot2:在分组箱线图中显示平均值和观察次数

SAS连续观察中的两个平均值 - 考虑到下降时间变化的额外小时

如何在 ggplot2 boxplot 中为每组添加多个观察值并使用组平均值?

根据数据框的重复列值制作具有平均值(平均值)的表[重复]