什么';s是Stata'的R等价物;s_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 +--------+ |

我想知道在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 

     +--------+
     |      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)
@khasha
variable\ux/dplyr::lag(variable\ux,1)
严格来说
\n
根本不是一个函数。它是一个内置变量,是当前观测值,在数据集的当前
sort
顺序中的当前含义。在
by
varlist的支持下,有一个额外的扭曲:这是由varlist的不同值组合定义的当前组内确定的。(我不希望这对不使用Stata的R用户来说完全是不言自明的,就像一些R语法的简短定义通常是相反的一样。)在R中,数据帧可以用
1:nrow(df)
索引,向量可以用
seq_-along(vec)
索引。关于
by
varlist的解释提出了与R
by
函数同源的可能性,其中varlist等价物是
list(factor1,factor2,…)
。我发现Stata文档相当不透明,但也听到Stata追随者对R文档的同样抱怨。这两种语言需要不同的思维方式。文档中精确列出了对象的类型,但这些类型名称并不总是符合用户的天真期望。
ave(1:length(vect), vect, FUN = length)