R获取与上一行的百分比差异

R Get percentage difference from previous row

我有一个包含 4 列的数据集,第 1 列是日期,其他 3 列是数字。我正在尝试从前一行获取这 3 个数字列的 % diff。我知道已经有一些关于这类问题的帖子df %>% mutate_each(funs(. - lag(.))) %>% na.omit(),但大多数都不能关心日期,因为我希望日期不变,并且需要 % 不同。

这是数据集

date=c('2018-01-01', '2018-02-01', '2018-03-01')
a=c(1,3,2)
b=c(89,56,47)
c=c(1872,7222,2930)
x=data.frame(date,a,b,c)

我希望有这样的最终数据集

x=data.frame(date,a,b,c)
a=c(NA, 2, -0.333)
b=c(NA, -0.371, -0.161)
c=c(NA,2.857, -0.594)
x=data.frame(date,a,b,c)

这意味着 A 列,2=3/1-1,-0.333=2/3-1 对于 B 列,-0.371=56/89-1 等

非常感谢您的帮助!

使用包data.table的解决方案:

x = as.data.table(x)
cols = c("a", "b", "c")
x[,(paste0(cols, "_pctChange")) := lapply(.SD, function(col){ 
      (col-shift(col,1,type = "lag"))/shift(col,1,type = "lag")
  }), .SDcols=cols]

quantmod 包有一个非常有用的函数,叫做 Delt()

您只需执行以下操作:

x[-1] <- sapply(x[-1], Delt)

我不确定你对 sapply 有多熟悉,但如果你想访问 Delt() 的参数来调整你的计算,你可以尝试类似的方法:

x[-1] <- sapply(x[-1], function(x) { Delt(x, k=2) })