【发布时间】:2023-03-11 23:23:01
【问题描述】:
我希望有人可以帮助我解决这个问题。我正在处理每五年记录一次的时间序列数据。以数据框df为例,时间步长在df$Time,记录值在df$A。
df
Time A
5 4.8
10 19.6
15 27.5
20 39.7
我需要做的是将df 转换为年度时间序列,并根据计算用新值填充所有新记录。我已使用以下方法成功地将df 转换为年度数据df2:
df2 <- data.frame("Time" = c(5:20), "A" = c(5:20))
df2$A[] <- sapply(df2$A, function(x) df$A[match(x, df$Time)])
df2[is.na(df2)] <- 0
df2
Time A
5 4.8
6 0
7 0
8 0
9 0
10 19.6
11 0
12 0
13 0
14 0
15 27.5
16 0
17 0
18 0
19 0
20 39.7
我不知道如何计算 df2$A 的新值。计算取决于其他行/记录值的相对位置——例如,对于df2$A[2],计算将是df2$A[2] <- df2$A[1] + (df2$A[6] - df2$A[1])/5。它还会在整个数据框中发生变化,例如df2$A[7] <- df2$A[6] + (df2$A[11] – df2$A[6]) / 5。
for 循环只会产生挫败感,我试图做到这一点而不为每条新记录编写一行代码(实际数据有数百条记录)。我正在尝试以一种有效的方式联系df3 - 谢谢!
df3
Time A
5 4.8
6 7.76
7 10.72
8 13.68
9 16.64
10 19.6
11 21.18
12 22.76
13 24.34
14 25.92
15 27.5
16 29.94
17 32.38
18 34.82
19 37.26
20 39.7
【问题讨论】:
标签: r dataframe time-series