gpt4 book ai didi

r - 如何从 R 中的每日时间序列计算每月的变化率?

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

我开始对 R 感兴趣,而且我对时间序列概念是全新的。任何人都可以根据每日数据点指出正确的方向来计算每月的百分比变化吗?我想要每个月的第一个和最后一个数据点之间的变化。例如:

t系列数据:

1/1/2000 10.00
...
1/31/2000 10.10
2/1/2000 10.20
...
2/28/2000 11.00

我正在寻找以下形式的返回数据框:
1/31/2000 .01
2/28/2000 .0784

理想情况下,我可以从上个月的端点计算到当月的端点,但我假设按月分区作为起点更容易。我正在查看包 zoo 和 xts,但仍然卡住了。有接类人吗?谢谢...

最佳答案

这是使用 plyr 的一种方法和 ddply .
我按顺序使用 ddply,首先获取每个月的第一行和最后一行,然后再次计算 每月返回。
(也许使用 xts 或 zoo 可能更容易,我不确定。)

#Using plyr and the data in df
df$Date <- as.POSIXlt(as.Date(df$Date, "%m/%d/%Y"))
df$Month <- (df$Date$mon + 1) #0 = January

sdf <- df[,-1] #drop the Date Column, ddply doesn't like it

library("plyr")
#this function is called with 2 row data frames
monthlyReturn<- function(df) {
(df$Value[2] - df$Value[1])/(df$Value[1])
}

adf <- ddply(sdf, .(Month), function(x) x[c(1, nrow(x)), ]) #get first and last values for each Month
mon.returns <- ddply(adf, .(Month), monthlyReturn)

这是我用来测试的数据:
> df
Date Value
1 1/1/2000 10.0
2 1/31/2000 10.1
3 2/1/2000 10.2
4 2/28/2000 11.0
5 3/1/2000 10.0
6 3/31/2000 24.1
7 5/10/2000 510.0
8 5/22/2000 522.0
9 6/04/2000 604.0
10 7/03/2000 10.1
11 7/30/2000 7.2
12 12/28/2000 11.0
13 12/30/2000 3.0

> mon.returns
Month V1
1 1 0.01000000
2 2 0.07843137
3 3 1.41000000
4 5 0.02352941
5 6 0.00000000
6 7 -0.28712871
7 12 -0.72727273

希望有帮助。

关于r - 如何从 R 中的每日时间序列计算每月的变化率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730359/

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