2014-12-02 2 views
1

숫자 데이터의 단일 열을 가져오고 싶습니다.이 경우에는 0에서 10 사이의 값으로 묶고 반복적으로 고정 값을 뺍니다. 현재의 패러다임에서 각 열은 시간 간격을 나타내며 이전 시간 단계 (t-1)에 따라 다릅니다. 이 종속성은 숫자가 10으로 재설정 된 열을 정의한 다음 다시 저하되기 시작하기 때문에 중요합니다. 주요 문제점은 대규모 데이터 세트의 경우 매우 비효율적이며이 작업을 수행하는 데 더 빠르고 확장 가능한 방법이 있음을 확신합니다.R 대규모 데이터 세트에 대한 효율적인 재귀 계산

df <- data.frame(matrix(data=0,nrow=10,ncol=10)) 
df[,1] <- data.frame(runif(10,0,10)) 
df[c(3,5,7),4] <- 10 
degradation <- .16 
for (year in 2:10){ 
df[,year][df[,year]!=10] <- df[,year-1][df[,year]!=10]-degradation 
} 
df[df<0]<-0 

다음은 데이터를 어떻게 보이게하는지 간단하고 비효율적 인 예입니다. 그 가능성은 필자의 낡은 탁월한 사고 방식에 머물러 있기 때문에 필요한 경우 데이터를 구조화하는 다양한 방법에 개방적입니다.

감사합니다.

답변

0

데이터의 매트릭스 때문에 데이터 프레임을 사용하지 않는

m <- matrix(data=0, nrow=10, ncol=10) 
m[,1] <- runif(10, 0, 10) 
m[c(3,5,7), 4] <- 10 

않도록 중간 값을 나타내는 변수 (ridx)를 사용하여 계산을 복제; 아이디어는 일정한 리셋 평가하기 R이 있다는 경우 이차원 서브 세트 할당

degradation <- .16 
for (year in 2:10) { 
    ridx <- m[, year] != 10 
    m[ridx, year] <- m[ridx, year-1L] - degradation 
} 

를 사용 후 일정 기간 후에 개별 행 확률을 P0 단지 갖는 = R을 갖는다 리셋되어, P1 = (1 - R) R가되고 다시 1 시간 전, P2 = (1 - R)^2 R 2 개 기간 전에 초기화 ..., PT = (1 - R)^t (이 기하학적 분포를 설명) 기간 전에 초기화R. 해당 값은 X0 = 10이다, X1 = 10 - D , X2 = 10-2 D, ..., XT = 10 - T는 D. t = 10/d 시간주기 동안 리셋이 없다면 값은 0입니다. 따라서 샘플이 0이 아닌 확률은 sum_ {i = 0}^{i = 10/d - 1} pi이고 0이 아닌 행들의 평균 값은 sum_ {i = 0}^{i = 10/d - 1} pi xi이다. 이들 (및 10 ... 0의 개별 상태의 확률)은 시뮬레이션없이 쉽게 계산됩니다.

+0

간단한 개선, 감사합니다! – gvanderbilt

+0

@gvanderbilt가 더 수학적 분석을 조금 추가했습니다. –

관련 문제