什么';s是Stata'的R等价物;s_n函数?
我想知道在R中是否有一个函数,比如在Stata中,你可以在每次观测之前或之后使用观测n个数的值。例如,如果我在编写类似于什么';s是Stata'的R等价物;s_n函数?,r,stata,lag,equivalent,lead,R,Stata,Lag,Equivalent,Lead,我想知道在R中是否有一个函数,比如在Stata中,你可以在每次观测之前或之后使用观测n个数的值。例如,如果我在编写类似于variable\ux/variable\ux[\un-1]的东西之前需要对观察值进行乘法或除法,那么一般来说,您无法获得完全相同的功能。例如,在Stata中,您可能会使用_n像 clear set obs 5 gen x = 1 replace x = x[ _n - 1 ]*1.1 if _n > 1 list +--------+ |
variable\ux/variable\ux[\un-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
(如@khasha所述)。这些解决方案涵盖了大多数情况,但并非所有情况
如果您确实需要使用前一行进行迭代,并且不能使用这些快捷方式之一,那么仍然可以使用循环(R语法与Stata类似)。如果循环很慢,你也可以用RCPP包在C++中写。 < P>我不确切地知道“n个数”实际上是什么意思。如果它是一个索引,那么我可能错误地解释了它。您可以使用半隐藏的
.last.value
变量获取最后计算的值:
> for( i in 1:10) x <- x*.Last.value
> x
[1] 177147
> 3^11
[1] 177147
最短的路线是:
按排序向量:gen n=\u 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)
按排序向量:gen N=\u N
ave(1:length(vect), vect, FUN = length)
variable\ux/lag(variable\ux,1)
@khashavariable\ux/dplyr::lag(variable\ux,1)
严格来说\n
根本不是一个函数。它是一个内置变量,是当前观测值,在数据集的当前sort
顺序中的当前含义。在by
varlist的支持下,有一个额外的扭曲:这是由varlist的不同值组合定义的当前组内确定的。(我不希望这对不使用Stata的R用户来说完全是不言自明的,就像一些R语法的简短定义通常是相反的一样。)在R中,数据帧可以用1:nrow(df)
索引,向量可以用seq_-along(vec)
索引。关于by
varlist的解释提出了与Rby
函数同源的可能性,其中varlist等价物是list(factor1,factor2,…)
。我发现Stata文档相当不透明,但也听到Stata追随者对R文档的同样抱怨。这两种语言需要不同的思维方式。文档中精确列出了对象的类型,但这些类型名称并不总是符合用户的天真期望。
ave(1:length(vect), vect, FUN = length)