首先,我有一个5行10列的数据帧(称之为“年”)。我需要构建一个新的(x1-x2)/ x1,x1是第一个元素,x2是“years”中列的第二个元素,然后是(x2-x3)/ x2,依此类推。我认为rollapply
将是该任务的最佳工具,但我无法弄清楚如何定义此类函数以将其插入rollapply
。
我是R的新手,所以我希望我的问题不是太基础。无论如何,我在这里找不到类似的问题,所以如果有人可以帮助我,我会非常感激。
答案 0 :(得分:1)
您可以使用transform, diff
和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
答案 1 :(得分:0)
diff.zoo
参数的zoo包中的 arithmetic=FALSE
将每个数字除以每列中的前一个:
library(zoo)
as.data.frame(1 - diff(zoo(DF), arithmetic = FALSE))