0

タイトルの言い回しは私が知っている厄介です。しかし、ここに無料の断片があります:

私がベクトルを持っていると仮定しxます。x[i] - x[i-1]ベクトルを実行する値のリスト、つまり変化率を取得したいとします。例を参照すると、などの値を24.30518 - 24.43082新しいベクトルに保存する必要があります。ループはRでそうするための最も効果的な方法ですか?

   hour   value
1    00 24.43082
2    01 24.30518
3    02 24.18798
4    03 24.07979
5    04 23.99070
6    05 23.91297
7    06 23.84412
8    07 23.83976
9    08 24.37504
10   09 25.24583
11   10 26.22111
12   11 27.14665
13   12 27.85554
14   13 28.34957
15   14 28.53274
16   15 28.39928
17   16 28.03880
18   17 27.51899
19   18 26.91361
20   19 26.16487
21   20 25.52663
22   21 25.10923
23   22 24.79797
24   23 24.58154

これをで行うことは可能でしょうlapplyか?または、ラグを使用するなどの他の方法はありますか?または他の倹約的な方法はありますか?

ボーナス の質問:私が扱うデータは周期的な温度系列です。つまり、ベクトルの最後の要素の後にベクトルの最初の要素が続くということです。この場合、(出力の最初の要素のnull値の代わりに)値の完全なセットを取得するために、上記のメソッドのいずれかを拡張することが可能でしょうか。

4

3 に答える 3

3

'diff' はラグの差を示します。ラグは既定で 1 に設定されています (ここでは必要に応じて)。

追加の要素を取得するには、それを直接計算し、diff の結果の先頭に追加します。

first <- x$value[1] - x$value[length(x$value)
result <- c(first, diff(x$value))
于 2012-05-28T15:46:24.720 に答える
2

R でのループは避けてください。ループは遅いです。特定のタスクでは、 を使用しますdiff

于 2012-05-28T15:42:17.440 に答える
1

あなたの質問に対するより一般的な答えは、あなたのベクトルとあなたのベクトルのシフトされたコピーの間で数学的な操作をすることです。diff()関数は、違いだけの特殊なケースですが、2つのシフトされたベクトルに対して任意のベクトル化された関数を使用できます。たとえば、xの製品とxの次のアイテムが必要だとします。

n <- length(x)
x[1:(n-1)] * x[2:n]

(最後の項目に次の項目を掛けることができないため、おそらくこの場合は最後に、元のベクトルの長さに一致するようにパディングすることをお勧めします。)

{一般的なケースであなたの質問に直接答えるために、ここに微分方程式があります

x[2:n] - x[1:(n-1)]

}

于 2012-05-28T18:06:09.297 に答える