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) })
我有一个包含 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) })