gpt4 book ai didi

r - 将五年数据转换为年度数据并在 R 中计算新记录

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

我希望有人可以帮助我解决这个问题。我正在处理每五年有一次记录的时间序列数据。数据框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 中,您可以使用 approx像这样的功能:

df <- data.frame("Time" = c(5, 10, 15, 20), "A" = c(4.8, 19.6, 27.5, 39.7)) 
df2 <- as.data.frame(approx(x = df$Time, y = df$A, xout = 5:20))
names(df2) <- names(df)

结果:
> df2
Time A
1 5 4.80
2 6 7.76
3 7 10.72
4 8 13.68
5 9 16.64
6 10 19.60
7 11 21.18
8 12 22.76
9 13 24.34
10 14 25.92
11 15 27.50
12 16 29.94
13 17 32.38
14 18 34.82
15 19 37.26
16 20 39.70

关于r - 将五年数据转换为年度数据并在 R 中计算新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52005505/

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