2

首先,我有一个 5 行 10 列的数据框(我们称之为“年”)。我需要建立一个新的做(x1-x2)/x1,x1是“年”列的第一个元素,x2是第二个元素,然后是(x2-x3)/x2等等。我认为rollapply这将是完成这项任务的最佳工具,但我不知道如何定义这样的函数以将其插入rollapply.

我是 R 新手,所以我希望我的问题不是太基本。无论如何,我在这里找不到类似的问题,所以如果有人可以帮助我,我将非常感激。

4

2 回答 2

1

可以使用transform, diffand 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
于 2014-06-02T20:19:36.037 回答
0

diff.zoo在带有参数的 zoo 包中,arithmetic=FALSE将每个数字除以每列中的先验:

library(zoo)
as.data.frame(1 - diff(zoo(DF), arithmetic = FALSE))
于 2014-06-02T23:24:28.117 回答