我正在分析数据,想一次计算许多移动平均线。我将在这里举一个我正在尝试做的事情的例子。
表 1:ID 和日期
IDDate <- data.frame(ID = c("A","B","C"),
Stage1 = c(12, 13, 10),
Stage2 = c(14, 30, 12))
身份证 | 第一阶段 | 第二阶段 |
---|---|---|
A | 12 | 14 |
B | 13 | 30 |
C | 10 | 12 |
表2:每日温度数据
IDTemp <- data.frame(Day = c(1:12),
A = c(-3,-2,1,4,2,3,10,15,5,4,6,4),
B = c(-4,2,0,3,12,10,9,8,9,3,1,2),
C = c(4,1,2,5,5,2,3,2,1,5,6,1))
日 | A | B | C |
---|---|---|---|
1 | -3 | -4 | 4 |
2 | -2 | 2 | 1 |
3 | 1 | 0 | 2 |
4 | 4 | 3 | 5 |
5 | 2 | 12 | 5 |
6 | 3 | 10 | 2 |
7 | 10 | 9 | 3 |
8 | 15 | 8 | 2 |
9 | 5 | 9 | 1 |
10 | 4 | 3 | 5 |
11 | 6 | 1 | 6 |
12 | 4 | 2 | 1 |
我想计算表 1 中列出的日期前 4 天每个 ID 的每个温度的平均值。这意味着,对于第 1 阶段,我需要 A 的第 9-12 天的温度。如果至少有一天没有温度数据,那么它应该返回 NA。
结果应该是这样的。
表 3:期望的结果
身份证 | 第一阶段温度 | 第 2 阶段温度 |
---|---|---|
A | 4,75 | 不适用 |
B | 不适用 | 不适用 |
C | 2,75 | 3,25 |
我已经看到了根据特定结束日期计算滚动平均值的方法,但对于多个结束日期我没有找到任何东西。但是,如果这是一个重复的主题,我们深表歉意。
在动物园中使用 rollmean 我不确定如何指定必要的参数来限制平均值仅在特定(但变化)的时间窗口中计算。
我们需要做的就是:
IDDate <- data.frame(ID = c("A","B","C"),
Stage1 = c(12, 13, 10),
Stage2 = c(14, 30, 12))
IDTemp <- data.frame(Day = c(1:12),
A = c(-3,-2,1,4,2,3,10,15,5,4,6,4),
B = c(-4,2,0,3,12,10,9,8,9,3,1,2),
C = c(4,1,2,5,5,2,3,2,1,5,6,1))
new_df <- t(
sapply(X = unique(IDDate$ID),
FUN = \(x) { sapply(
X = IDDate[IDDate$ID == x, 2:3],
FUN = \(j) mean( IDTemp[(j - 3L):j, x] ))
}
)
)
new_df
#> Stage1 Stage2
#> A 4.75 NA
#> B NA NA
#> C 2.75 3.25
创建于 2023-11-22,使用 reprex v2.0.2