Что такое R-эквивалент функции Stata _n?

Мне интересно, есть ли такая функция в R, как в Stata, где вы можете использовать значение наблюдения 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). Если цикл медленный, вы также можете написать его на C++ с помощью пакета Rcpp.

Самый короткий путь:

Быстрая сортировка 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)

Быстрая сортировка vect:gen N=_N

ave(1:length(vect), vect, FUN = length)

Я не совсем уверен, что на самом деле означает фраза "n цифр перед". Если это индекс, то, возможно, я неправильно его интерпретировал. Вы можете получить последнее значение, рассчитанное с помощью полу-скрытого .Last.value переменная:

> for( i in 1:10) x <- x*.Last.value
> x
[1] 177147

> 3^11
[1] 177147

Если вы используете индекс i ссылаться на предмет, obj тогда, очевидно, вы могли бы обратиться к obj[я-10], Существует функция встраивания, которая создает матрицу столбцов, которые "смещены".

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
Другие вопросы по тегам