R的同比变化百分比

时间:2015-01-20 07:44:58

标签: r time-series

虽然我发现了几个类似的问题,但我找不到基本R中我的问题的简单解决方案。 我想从一组数据(这里是y值)计算同比百分比变化,并将此“Delta”系列作为新列添加到我的数据框中。

例如:

>x = c(2000,2001,2002,2003,2004,2005,2006)   
>y = c(100,104,106,108,112,115,121)   
>df = data.frame(x,y)

如果我通过读取.csv文件加载数据该怎么办?我是否必须将此数据转换为数据框?

1 个答案:

答案 0 :(得分:7)

data.table_1.9.5引入了新功能shift,默认情况下为type='lag'n=1L。如果需要更改,可以指定这些参数。 setDTdata.frame转换为data.table,根据条件(:=)创建新列(y/shift(y)...

library(data.table)
setDT(df)[, new.col := y/shift(y) - 1]

或在基地R(来自@David Arenburg的评论)

transform(df, new.col=c(NA,y[-1]/y[-nrow(df)]-1))