2

基本的に、R データフレームに列があり、次の関数を計算するコードを見つけたいと考えています。

(i - (i-1)) - ((i+1) - i)

つまり、関数の左側では から前の行の値を減算し(i-1)i関数の右側でiは次の行の値から減算したい(i+1)

誰かがそれを助けることができれば、それは大歓迎です。

4

4 に答える 4

8

またはこのように?国境で何が起こるべきですか?

x <- (1:5)^2
-diff(diff(x))
# [1] -2 -2 -2
于 2013-01-08T18:41:30.833 に答える
8

このような?

x <- (1:5)^2
#[1]  1  4  9 16 25
as.vector(filter(x,c(-1,2,-1),sides=1))    
#[1] NA NA -2 -2 -2
于 2013-01-08T18:39:03.653 に答える
2

あなたの説明は明確ではありません。がベクトルの場合a、求めているものは次のように提供されます。

f <- diff(a[-length(a)]) - diff(a[-1])

1 < i < length(a) に対して定義されるため、length(f) = length(a) - 2

a を data.frame 列に置き換えます。

于 2013-01-08T18:44:11.720 に答える
0

私は以前に同様のシナリオを経験しました。理想的には、はるかに高速であるため、ベクトル化されたコードに固執する必要があります。私が行ったことは、2つの新しいベクトルを作成することです。1つはすべてを1つ上にシフト(i-1)するか、1つ下にシフト(i + 1)し、計算でこれらを使用します。

i <- (1:5)^2

i.next     <- c(i[2:length(i)],NA)
i.previous <- c(NA,i[1:length(i)-1])

i.calculation <- (i - i.previous) - (i.next - i)

cbind(i,i.next,i.previous,i.calculation)

# i i.next i.previous i.calculation
# [1,]  1      4         NA            NA
# [2,]  4      9          1            -2
# [3,]  9     16          4            -2
# [4,] 16     25          9            -2
# [5,] 25     NA         16            NA
于 2013-01-08T18:41:44.110 に答える