重复观察平均每月
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 %>% group_by(Week, Household) %>% 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连续观察中的两个平均值 - 考虑到下降时间变化的额外小时