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