0

R で次の単純な関数を作成しました。

fun    <- function(a,b,c,d,e){b+(c-a)*((e-b)/(d-a))}

この関数を次のdata.frameようなものに適用したい:

> data.frame("x1"=seq(55,75,5),"x2"=round(rnorm(5,50,10),0),"x3"=seq(30,10,-5))
  x1 x2 x3
1 55 51 30
2 60 45 25
3 65 43 20
4 70 57 15
5 75 58 10

fun個別の行ごとに適用して新しい変数を作成したいのですx4が、ここで難しい部分があります (少なくとも私にとっては..): 引数 d と e には、次の行の値x2を使用したいと考えています。x3したがって、例の最初の行は次のようになりますfun(a=55,b=51,c=30,d=45,e=25)。を使用mapply()して各行に関数を適用できることはわかっていますが、次の行の値を使用する必要があることを mapply に伝える方法、またはmapply()?

よろしくお願いします!

4

1 に答える 1

6

を使用mapplyしますが、4 列目と 5 列目を 1 行ずつシフトします。手動で行うことも、 を使用することもできますtaRifx::shift

> dat
  x1 x2 x3
1 55 25 30
2 60 58 25
3 65 59 20
4 70 68 15
5 75 43 10
library(taRifx)
> shift(dat$x2)
[1] 58 59 68 43 25
> mapply( dat$x1, dat$x2, dat$x3, shift(dat$x2), shift(dat$x3) , FUN=fun )
[1]    25.00000 -1272.00000   719.00000   -50.14815    26.10000

最後の行を折り返しではなく NA にしたい場合は、次を使用しますwrap=FALSE,pad=TRUE

> shift(dat$x2,wrap=FALSE,pad=TRUE)
[1] 58 59 68 43 NA
于 2013-03-21T16:11:32.557 に答える