繁体   English   中英

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

[英]R Get percentage difference from previous row

我有一个包含4列的数据集,第一个col是日期,其他3个是数字。 我正在尝试从那3个数字列的上一行获取%diff。 我知道已经有一些关于这类问题的帖子df %>% mutate_each(funs(. - lag(.))) %>% na.omit() ,但是由于它们的存在,大多数都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)

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

非常感谢你的帮助!

一个使用package 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) })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM