首先,我有一个 5 行 10 列的数据框(我们称之为“年”)。我需要建立一个新的做(x1-x2)/x1,x1是“年”列的第一个元素,x2是第二个元素,然后是(x2-x3)/x2等等。我认为rollapply
这将是完成这项任务的最佳工具,但我不知道如何定义这样的函数以将其插入rollapply
.
我是 R 新手,所以我希望我的问题不是太基本。无论如何,我在这里找不到类似的问题,所以如果有人可以帮助我,我将非常感激。
可以使用transform, diff
and length
,不需要使用rollapply
> df <- head(iris,5) # some data
> transform(df, New = c(NA, diff(Sepal.Length)/Sepal.Length[-length(Sepal.Length)] ))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species New
1 5.1 3.5 1.4 0.2 setosa NA
2 4.9 3.0 1.4 0.2 setosa -0.03921569
3 4.7 3.2 1.3 0.2 setosa -0.04081633
4 4.6 3.1 1.5 0.2 setosa -0.02127660
5 5.0 3.6 1.4 0.2 setosa 0.08695652
diff.zoo
在带有参数的 zoo 包中,arithmetic=FALSE
将每个数字除以每列中的先验:
library(zoo)
as.data.frame(1 - diff(zoo(DF), arithmetic = FALSE))