R 的同比百分比变化
year-over-year percentage change in R
虽然我发现了几个类似的问题,但我无法在 base 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 文件加载数据怎么办?我必须将此数据转换为数据框吗?
data.table_1.9.5 引入了新函数 shift
,默认情况下为 type='lag'
和 n=1L
。如果需要更改,您可以指定这些参数。 setDT
将 data.frame
转换为 data.table
,根据条件 (y/shift(y)...
)
创建一个新列 (:=
)
library(data.table)
setDT(df)[, new.col := y/shift(y) - 1]
或者在 base R 中(来自@David Arenburg 的评论)
transform(df, new.col=c(NA,y[-1]/y[-nrow(df)]-1))
虽然我发现了几个类似的问题,但我无法在 base 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 文件加载数据怎么办?我必须将此数据转换为数据框吗?
data.table_1.9.5 引入了新函数 shift
,默认情况下为 type='lag'
和 n=1L
。如果需要更改,您可以指定这些参数。 setDT
将 data.frame
转换为 data.table
,根据条件 (y/shift(y)...
)
:=
)
library(data.table)
setDT(df)[, new.col := y/shift(y) - 1]
或者在 base R 中(来自@David Arenburg 的评论)
transform(df, new.col=c(NA,y[-1]/y[-nrow(df)]-1))