Stata のように R に関数があるかどうか疑問に思っています。ここでは、各観測の前後に n 個の観測の値を使用できます。たとえば、このようなものを書く前に、観察で乗算または除算する必要がある場合variable_x/variable_x[_n-1]
3 に答える
一般に、まったく同じ機能を取得することはできません。たとえば、Stata では、次のように _n を反復処理できます...
clear
set obs 5
gen x = 1
replace x = x[ _n - 1 ]*1.1 if _n > 1
list
+--------+
| x |
|--------|
1. | 1 |
2. | 1.1 |
3. | 1.21 |
4. | 1.331 |
5. | 1.4641 |
+--------+
R では、関数を使用してこのケースを処理できcumprod
ます。それ以外の場合は、 を使用できますcumsum
。そして他の人ではlag
(@Khashaaが述べたように)。これらのソリューションはほとんどのケースをカバーしていますが、すべてのケースをカバーしているわけではありません。
前の行を使用して反復する必要があり、これらのショートカットのいずれかを使用できない場合でも、ループを使用できます (R 構文は Stata のものと似ています)。ループが遅い場合は、Rcpp パッケージを使用して C++ で記述することもできます。
「n個前」というフレーズが実際に何を意味するのか正確にはわかりません。インデックスの場合、間違って解釈した可能性があります。半隠し.Last.value
変数で計算された最後の値を取得できます。
> for( i in 1:10) x <- x*.Last.value
> x
[1] 177147
> 3^11
[1] 177147
i
アイテムを参照するためにインデックスを使用している場合、明らかにi-10obj
を参照できます。「シフト」された列のマトリックスを構築する埋め込み関数があります。obj[
]
x <- 1:10
embed (x, 3)
[,1] [,2] [,3]
[1,] 3 2 1
[2,] 4 3 2
[3,] 5 4 3
[4,] 6 5 4
[5,] 7 6 5
[6,] 8 7 6
[7,] 9 8 7
[8,] 10 9 8
最短の方法は次のとおりです。
bysort vect:gen n=_n
vect=c(1,1,1,2,2,2,2,3,3,3,3,3,4)
n=ave(1:length(vect), vect, FUN = seq_along)
bysort vect:gen N=_N
ave(1:length(vect), vect, FUN = length)