计算缺失日期的百分比变化(时间序列)

时间:2015-06-17 15:38:05

标签: r time series

我试图计算某段时间内某些天没有任何数据的变化百分比。我遇到的问题是Delt功能会产生NA(我猜测因为我错过了日期?)

代码看起来像这样:

Date <- c("6/1/2015", "6/3/2015", "6/4/2015", "6/5/2015", "6/8/2015")
variable <- c(4,7,10,22,3)
df <- data.frame(Date, variable)
df$Date <- as.Date(df$Date, "%m/%d/%Y")
df

library(plyr)
library(quantmod)

perct.Change <- ddply(df, "Date", transform,
    Daily.Change = round(Delt(variable)*100,1))

,数据如下:

        Date variable Delt.1.arithmetic
1 2015-06-01        4                NA
2 2015-06-03        7                NA
3 2015-06-04       10                NA
4 2015-06-05       22                NA
5 2015-06-08        3                NA

2 个答案:

答案 0 :(得分:0)

我认为ddply函数的运行方式与您认为的不同 - 它在每个时间点将Delt应用于数据框并返回NA,因为它始终是时间序列中Delt的第一个输出。

你可能想要这样的东西:

df$change <- Delt(df$variable) / c(0, as.numeric(diff(df$Date)))

我们计算了Delt,然后将它除以度量之间的天数差异。

答案 1 :(得分:0)

您可以尝试以下方法:

> changes
            [,1]
2015-06-01    NA
2015-06-03     3
2015-06-04     3
2015-06-05    12
2015-06-08   -19

有了这个,我获得了:

lag()

这些是每天的绝对变化。要将这些每日绝对更改转换为每日百分比更改,可以使用 perc_change <- round(changes/lag(df,1)*100,2) 函数转移原始时间序列的条目:

> perc_change
             [,1]
2015-06-01     NA
2015-06-03  75.00
2015-06-04  42.86
2015-06-05 120.00
2015-06-08 -86.36

这会产生:

@Rest(rootUrl = "your_url", converters = FormHttpMessageConverter.class)
public interface UploadClient extends RestClientHeaders {
    @Post("/Image/{id}")
    @RequiresHeader(HttpHeaders.CONTENT_TYPE)  
    String uploadImage(int id, MultiValueMap<String, Object> data);     
}

希望这有帮助。