Что такое 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