gpt4 book ai didi

r - 如何获得频率滞后周期的平均值作为r中的新变量

转载 作者:行者123 更新时间:2023-12-01 10:32:59 25 4
gpt4 key购买 nike

我正在尝试安排我的面板数据集以使用定期出现的滞后期的平均值来创建新变量。我的示例数据集如下所示,可以使用以下代码访问

     Time ID  Value1 Value2
1 Jan-14 A 12 NA
2 Feb-14 A 14 NA
3 Mar-14 A 15 NA
4 Apr-14 A 18 NA
5 May-14 A 10 NA
6 Jun-14 A 12 13.67
7 Jul-14 A 13 15.67
8 Aug-14 A 14 14.33
9 Jan-14 B 32 NA
10 Feb-14 B 14 NA
11 Mar-14 B 15 NA
12 Apr-14 B 18 NA
13 May-14 B 20 NA
14 Jun-14 B 12 20.33
15 Jul-14 B 13 15.67
16 Aug-14 B 14 17.78

df<-structure(list(Time = structure(c(4L, 3L, 7L, 1L, 8L, 6L, 5L,
2L, 4L, 3L, 7L, 1L, 8L, 6L, 5L, 2L), .Label = c("Apr-14", "Aug-14",
"Feb-14", "Jan-14", "Jul-14", "Jun-14", "Mar-14", "May-14"), class = "factor"),
ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
Value1 = c(12L, 14L, 15L, 18L, 10L, 12L, 13L, 14L, 32L, 14L,
15L, 18L, 20L, 12L, 13L, 14L)), .Names = c("Time", "ID",
"Value1"), class = "data.frame", row.names = c(NA, -16L))

我想创建一个名为 Value2 的新变量,考虑到每次观察对应于前 4-6 个月的 3 个月的平均值(这只是为了举例,我的月度数据集涵盖 40 个人 12 年,而且我将不得不考虑比 3 个月更高的延迟,也许 14 个月)。在这里我还需要考虑 ID,因为需要保留面板结构。对于 3 个月前未完成的所有观察,应标记为 NA。例如,Jun_14_A 应该获取从 Mar_14_AJan_14_A 的平均值。 (12+14+15)/3 =13.67

我引用了一些例子 here但是那些并没有提供我正在寻找的特别滞后的平均值,并且在没有前 3 个完整月份时表示为 NA 。

提前感谢您的帮助

最佳答案

这是另一种仅使用 data.table 的方法,它是 shift 函数与 Reduce 相结合(这几乎是对 this 的欺骗)

library(data.table)
setDT(df)[, Value2 := Reduce(`+`, shift(Value1, 3:5))/3, by = ID]
df
# Time ID Value1 Value2
# 1: Jan-14 A 12 NA
# 2: Feb-14 A 14 NA
# 3: Mar-14 A 15 NA
# 4: Apr-14 A 18 NA
# 5: May-14 A 10 NA
# 6: Jun-14 A 12 13.66667
# 7: Jul-14 A 13 15.66667
# 8: Aug-14 A 14 14.33333
# 9: Jan-14 B 32 NA
# 10: Feb-14 B 14 NA
# 11: Mar-14 B 15 NA
# 12: Apr-14 B 18 NA
# 13: May-14 B 20 NA
# 14: Jun-14 B 12 20.33333
# 15: Jul-14 B 13 15.66667
# 16: Aug-14 B 14 17.66667

关于r - 如何获得频率滞后周期的平均值作为r中的新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40146786/

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