2016-10-28 10 views
1

나는 관측 n 수치를 각 관측 전후에 사용할 수있는 Stata처럼 R에 함수가 있는지 궁금하다. 예를 들어 내가 일반적으로이 variable_x/variable_x[_n-1]Stata의 _n 함수에 해당하는 R은 무엇입니까?

+0

'variable_x/지연 (variable_x, 1) '' – Khashaa

+1

@Khashaa variable_x/dplyr :: 래그 (variable_x 1)'' – Gregor

+2

엄밀히 _n' 전혀 기능하지 않다. 현재 관찰 번호 인 현재의 '내장'변수이며 현재 데이터 세트의 '정렬'순서의 현재 의미입니다. _varlist_의 고유 한 값 아래에 _varlist_의 고유 한 값의 조합으로 정의 된 현재 그룹 내에서 결정되는 _ by_varlist_의 보호 아래에 추가 트위스트가 있습니다. (나는이 완전히 단정 R 사용자에게 일반적으로 역에있을 것입니다 일부 R 구문에 대한 간략한 정의보다 STATA를 더 이상 사용하지 않는 것으로 기대하지 않습니다.) R에서 –

답변

0

처럼 작성할 전에 곱이나 관찰로 분할해야하는 경우, 당신은 동일한 기능을 얻을 수 없습니다. 예를 들어, STATA, 당신은

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 기능이 사건을 처리 할 수있는 ... _n 등으로 반복 할 수 있습니다. 다른 경우 cumsum을 사용할 수 있습니다. 그리고 다른 곳에서는 lag (@Khashaa에 의해 언급 됨). 이러한 솔루션은 모든 경우는 아니지만 대부분을 포함합니다. 당신이 정말로 이전 행을 사용하여 반복 할 필요가 이러한 바로 가기 중 하나를 사용할 수없는 경우

, 당신은 여전히 ​​(R 구문은 STATA의와 동일하게) 루프를 사용할 수 있습니다. 루프가 느린 경우 Rcpp 패키지로 C++로 작성할 수도 있습니다.

0

나는 "전에 n 개의 숫자"라는 문구가 실제로 무엇을 의미하는지 정확히 모르겠어요. 색인이라면 잘못 해석했을 수도 있습니다. 당신은 반 숨겨진 .Last.value 변수로 계산 된 마지막 값을 얻을 수 있습니다 : 당신이 항목을 참조하는 인덱스 i를 사용하는 경우

> for(i in 1:10) x <- x*.Last.value 
> x 
[1] 177147 

> 3^11 
[1] 177147 

obj은 분명히 당신은 obj[ I-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 
0

최단의 방법은 : VECT bysort

: 겐 N = VECT bysort

vect=c(1,1,1,2,2,2,2,3,3,3,3,3,4) 
n=ave(1:length(vect), vect, FUN = seq_along) 

_n : 겐 N = _N

ave(1:length(vect), vect, FUN = length)