什么是R等价的Stata的_n函数?

时间:2016-10-28 06:30:28

标签: r stata lag equivalent lead

我想知道在Stata中是否有R函数,你可以在每次观察之前或之后使用观察n值的值。例如,在我写这样的variable_x/variable_x[_n-1]

之前,我需要乘以或除以观察

3 个答案:

答案 0 :(得分:0)

通常,您无法获得完全相同的功能。例如,在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 ++中编写它。

答案 1 :(得分:0)

我不确定“之前的数字”实际上是什么意思。如果它是一个索引,那么我可能会错误地解释它。您可以使用半隐藏tsconfig.json变量计算最后一个值:

.Last.value

如果您使用索引> for( i in 1:10) x <- x*.Last.value > x [1] 177147 > 3^11 [1] 177147 来引用某个项目i,那么显然您可以参考obj i-10 obj[。有一个embed函数构造一个“移位”的列矩阵。

]

答案 2 :(得分: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)