나는 관측 n 수치를 각 관측 전후에 사용할 수있는 Stata처럼 R에 함수가 있는지 궁금하다. 예를 들어 내가 일반적으로이 variable_x/variable_x[_n-1]
Stata의 _n 함수에 해당하는 R은 무엇입니까?
1
A
답변
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)
'variable_x/지연 (variable_x, 1) '' – Khashaa
@Khashaa variable_x/dplyr :: 래그 (variable_x 1)'' – Gregor
엄밀히 _n' 전혀 기능하지 않다. 현재 관찰 번호 인 현재의 '내장'변수이며 현재 데이터 세트의 '정렬'순서의 현재 의미입니다. _varlist_의 고유 한 값 아래에 _varlist_의 고유 한 값의 조합으로 정의 된 현재 그룹 내에서 결정되는 _ by_varlist_의 보호 아래에 추가 트위스트가 있습니다. (나는이 완전히 단정 R 사용자에게 일반적으로 역에있을 것입니다 일부 R 구문에 대한 간략한 정의보다 STATA를 더 이상 사용하지 않는 것으로 기대하지 않습니다.) R에서 –