gpt4 book ai didi

r - 两行除以前一行之间的差异

转载 作者:行者123 更新时间:2023-12-02 08:15:51 25 4
gpt4 key购买 nike

我已经能够找到每一列的两个连续行之间的差异,但现在我需要将其除以前一行。

Date    FXDL.AED.USD    FXDL.ALL.USD
03/01/2005 3.6726 92.1
04/01/2005 3.6726 92.1
05/01/2005 3.6725 94.5
06/01/2005 3.6726 95.1
07/01/2005 3.6725 95.3

例如,每列的(第 2 行 - 第 1 行)/第 1 行与(第 3 行 - 第 2 行)/第 2 行之间的差异等。

我用过diff_fxdl_weekdays <- sapply(fxdl_weekdays[,sapply(fxdl_weekdays, is.numeric)], diff)找到差异然后我试图将其除以 -nrow但这没有用。

最佳答案

一个想法是使用dplyr包和lag函数,

library(dplyr)

#define the function
fun1 <- function(x){ (x - lag(x))/lag(x)}

mutate_if(df, is.numeric, fun1)
# Date FXDL.AED.USD FXDL.ALL.USD
#1 03/01/2005 NA NA
#2 04/01/2005 0.000000e+00 0.000000000
#3 05/01/2005 -2.722867e-05 0.026058632
#4 06/01/2005 2.722941e-05 0.006349206
#5 07/01/2005 -2.722867e-05 0.002103049

如果你还想保留原来的列,那么简单的,

mutate_if(df, is.numeric, funs('diff' = fun1))
# Date FXDL.AED.USD FXDL.ALL.USD FXDL.AED.USD_diff FXDL.ALL.USD_diff
#1 03/01/2005 3.6726 92.1 NA NA
#2 04/01/2005 3.6726 92.1 0.000000e+00 0.000000000
#3 05/01/2005 3.6725 94.5 -2.722867e-05 0.026058632
#4 06/01/2005 3.6726 95.1 2.722941e-05 0.006349206
#5 07/01/2005 3.6725 95.3 -2.722867e-05 0.002103049

关于r - 两行除以前一行之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com