虽然我发现了几个类似的问题,但我找不到基本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文件加载数据该怎么办?我是否必须将此数据转换为数据框?
答案 0 :(得分:7)
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]
或在基地R(来自@David Arenburg的评论)
transform(df, new.col=c(NA,y[-1]/y[-nrow(df)]-1))