gpt4 book ai didi

R - 最近观察日期的 n 个观察值的平均值

转载 作者:行者123 更新时间:2023-12-04 11:52:26 25 4
gpt4 key购买 nike

我有一个数据框,其中包含个人 ID、观察日期和度量标准。它看起来像这样:

ID  Date    Metric
a Day 1 9
a Day 2 8
a Day 3 9
a Day 4 8
a Day 5 7
a Day 6 6
a Day 7 5
a Day 8 4
a Day 9 3
a Day 10 3
b Day 1 6
b Day 2 7
b Day 3 6
b Day 4 7
b Day 5 8
b Day 6 9
b Day 7 9
b Day 8 9

我想将其压缩为 ID 上的一行,并添加变量(prev2、prev3、prev4、prev5)来计算自最近观察日期以来的 n 个观察的平均值(但不包括平均值中的最后一个日期)。例如 - “prev2”是最近 2 次观察的平均值,“prev3”是最近 3 次观察的平均值。因此 ID A 的 prev2 是第 8 天和第 9 天的平均值 (3.5)。 ID B 的 prev3 是第 5、6、7 天 (8.67) 的平均值。最终从最近/最大日期回顾并平均一系列观察结果。

它应该是这样的:
ID  lastDate    metric_avg  prev2   prev3   prev4   prev5   
a Day 10 6.2 3.5 4 4.5 5
b Day 8 7.63 9 8.67 8.25 7.8

我正在尝试创建预测变量来分析我公司的人员流失。在离开工作的 1 个月或 2 个月后,约翰尼的绩效指标发生了变化,可以预测吉米在不久的将来是否会减员。

任何关于如何分析这些数据的建议或想法都会非常棒!

谢谢!

最佳答案

我会使用 dplyr , tidyrmagrittr .

数据

df <- 
data.frame(ID=c(rep("a", 10), rep("b", 8), rep("c", 3), "d"),
Date=c(paste("Day", 1:10), paste("Day", 1:8), paste("Day", 11:13), "Day 8"),
Metric=c(9, 8, 9, 8, 7, 6, 5, 4, 3, 3, 6, 7, 6, 7, 8, 9, 9, 9, 3, 1, 8, 10))

代码
library(tidyr); library(dplyr); library(magrittr)

df %<>% separate(Date, into=c("d1", "d2")) %>%
arrange(ID, as.numeric(d2)) %>%
group_by(ID) %>%
mutate(last_Date=paste("Day", max(as.numeric(d2))),
metric_Avg=mean(Metric),
prev2=(lag(Metric)+lag(Metric, 2))/2,
prev3=(lag(Metric)+lag(Metric, 2)+lag(Metric, 3))/3,
prev4=(lag(Metric)+lag(Metric, 2)+lag(Metric, 3)+lag(Metric, 4))/4,
prev5=(lag(Metric)+lag(Metric, 2)+lag(Metric, 3)+lag(Metric, 4)+lag(Metric, 5))/5) %>%
ungroup %>%
filter(last_Date==paste(d1, d2)) %>%
select(ID, last_Date, metric_Avg, prev2, prev3, prev4, prev5)

df

输出
  ID     last_Date   metric_Avg   prev2    prev3    prev4   prev5
1 a Day 10 6.200 3.5 4.000 4.50 5.0
2 b Day 8 7.625 9.0 8.667 8.25 7.8
3 c Day 13 4.000 2.0 NA NA NA
4 d Day 8 10.000 NA NA NA NA

备注

如果您的 Date列有日期然后使用 lubridate包裹。代码的前几行是:
df$Date <- ymd(df$Date) # id the Date is of the form yyyy-mm-dd or yyyy/mm/dd

df %<>% arrange(ID, Date) %>% group_by(ID) %>% mutate(last_Date= max(Date)...

关于R - 最近观察日期的 n 个观察值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31822552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com