使用数据帧的行定义函数(在rollapply中)

时间:2014-06-02 20:13:49

标签: r function zoo rollapply

首先,我有一个5行10列的数据帧(称之为“年”)。我需要构建一个新的(x1-x2)/ x1,x1是第一个元素,x2是“years”中列的第二个元素,然后是(x2-x3)/ x2,依此类推。我认为rollapply将是该任务的最佳工具,但我无法弄清楚如何定义此类函数以将其插入rollapply

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

2 个答案:

答案 0 :(得分:1)

您可以使用transform, difflength,无需使用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

答案 1 :(得分:0)

带有diff.zoo参数的zoo包中的

arithmetic=FALSE将每个数字除以每列中的前一个:

library(zoo)
as.data.frame(1 - diff(zoo(DF), arithmetic = FALSE))