R的同比百分比变化率

5
虽然我找到了几个类似的问题,但在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文件来加载我的数据,我该怎么办?我需要将这些数据转换为数据帧吗?


你是否在寻找 y[-1]/y[-7]?或者更一般的 df$y[-1]/df$y[-nrow(df)] - David Arenburg
非常感谢您提供的答案。我正在寻找类似于 df$y[-1]/df$y[-nrow(df)] 的东西。 但是,如果我执行 transform df = (df, new.col = c(NA, df$y[-1]/df$y[-nrow(df)]-1)), 我会收到一个错误信息:Error: unexpected symbol in "transform df" - Gilles Cosyn
你需要更改转换函数,使其变为transform(df, new.col=c(NA, df$y[-1]/df$y[-nrow(df)]-1)) - akrun
你可以安装这个包,但是使用基本的R中的transform函数有什么问题呢? - akrun
太好了!非常感谢您的快速回答!我使用了转换答案! :) - Gilles Cosyn
显示剩余2条评论
1个回答

9

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接