2011-12-07 3 views
1

R의 Mann Kendall 트렌드 테스트를 큰 크기 (약 1 백만)의 다른 크기의 시계열에 적용해야합니다. 나는 이미 특정 디렉토리의 모든 파일에서 시계열 (사실 숫자 목록)을 취한 다음 결과를 .txt 파일로 출력하는 스크립트를 만들었습니다.R 파일을 다른 크기의 배열에서 읽음

문제는 제가 1 백만 개의 시계열을 가지고있어서 1 백만 개의 파일을 만드는 것이 정확하지 않다는 것입니다. 그래서 모든 시계열을 하나의 .txt 파일 (예 : "#"와 같은 기호로 구분)에 넣으면 관리가 더 용이해질 수 있다고 생각했습니다. 이 R에 ("#"둘 사이) 등의 시리즈를 추출하고 분석을 적용 할 수 있으며,

1 
2 
4 
5 
4 
# 
2 
13 
34 
# 
... 

궁금 해요 : 그래서 나는이 같은 파일이?

library(Kendall) 
a=read.table("to_r.txt") 
numData=1017135 

for (i in 1:numData){ 

s1=subset(a,a$V1==i) 
m=MannKendall(s1$V2) 
cat(m[[1]]," ",m[[2]], " ", m[[3]]," ",m[[4]]," ", m[[5]], "\n" , file="monotonic_trend_checking.txt",append=TRUE) 
} 

이러한 접근 방식의 작품을하지만 문제는 계산을 위해 나이를 취하고 있다는 점이다 :

편집

다음 @acesnap 힌트는이 코드를 사용하고 있습니다. 더 빠른 접근 방법을 제안 할 수 있습니까?

+0

새로운 질문이있는 경우 가장 좋은 방법은 새 질문을 다시 게시하는 것입니다. 특히 이미 받아 들여진 대답이 있기 때문에. –

+1

@PaulHiemstra 당신의 힌트를 따를 것입니다 – markusian

+1

병이 목에 달려 있는지 여부에 달려 있습니다. 루핑 인 경우 data.table 패키지의 data.table을 살펴볼 수 있습니다. MannKendall 테스트 인 경우 속도를 높이는 것이 더 어려울 수 있습니다. –

답변

2

큰 파일에 들어갈 때 데이터 세트에 번호를 매기면 작업이 더 쉬워집니다. 그렇게한다면 for 루프와 서브 셋팅을 사용할 수 있습니다. 이 코드가 작동하려면, 당신은 '#'을 가지고 있어야

# Read in your data 
x=c('1','2','3','4','5','#','4','5','5','6','#','3','6','23','#') 
# Build a list of indices where you want to split by: 
ind=c(0,which(x=='#')) 
# Use those indices split the vector into a list 
lapply(seq(length(ind)-1),function (y) as.numeric(x[(ind[y]+1):(ind[y+1]-1)])) 

참고 :

여기
answers1 <- c() 
numOfDataSets <- 1000000 
for(i in 1:numOfDataSets){ 
    ss1 <- subset(bigData, bigData$setNum == i) ## creates subset of each data set 
    ans1 <- mannKendallTrendTest(ss1$data)  ## gets answer from test 
    answers1 <- c(answers1, ans1)    ## inserts answer into vector 
    print(paste(i, " | ", ans1, "",sep="")) ## prints which data set is in use 
    flush.console()        ## prints to console now instead of waiting 
} 
+0

나는 당신의 힌트를 따라 왔고 내가 올린 코드를 사용하고있다. 문제는 너무 느리다는 것입니다. 다른 것을 제안 해 주시겠습니까? – markusian

1

는 아마도 더 우아한 솔루션입니다 :

setNum  data 
    1   1 
    1   2 
    1   4 
    1   5 
    1   4 
    2   2 
    2   13 
    2   34 
...   ... 

그런 것을 좋아한다 파일의 끝에있는 문자.

관련 문제