3

Stata のように R に関数があるかどうか疑問に思っています。ここでは、各観測の前後に n 個の観測の値を使用できます。たとえば、このようなものを書く前に、観察で乗算または除算する必要がある場合variable_x/variable_x[_n-1]

4

3 に答える 3

1

一般に、まったく同じ機能を取得することはできません。たとえば、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++ で記述することもできます。

于 2016-10-28T20:35:51.397 に答える
0

「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
于 2016-11-01T00:58:06.330 に答える
0

最短の方法は次のとおりです。

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)
于 2017-04-03T11:13:26.387 に答える