2012-10-08 18 views
2

나는 시간별 온도 데이터를 나타내는 배열을 가지며 매일 최대 값 (또는 최소값 또는 평균값)을 계산하려고한다. 내가 루프를 사용하여이 작업을 수행 할 수 있습니다,하지만 난 R.다차원 배열의 변형

에서 이렇게 많은 더 나은 방법이 있어야 확신
require(ncdf4) 
nc <- nc_open('file.nc') 
t2 <- ncvar_get(nc,var='T2') # [ncols, nrows, nsteps] 

이제 (T2)는 31 일 월 744 개 시간마다 시간 간격으로 배열입니다. 내가 원하는 것은 :

t2.reshape[ncols, nrows, ndays, 24] 

거기에서 나는 매일 수단 또는 최대 또는 무엇이든을 계산하는 데 적용 할 수 있습니다 :

t2.max[ncols, nrows, 31] 

또는 더 일반적으로, I가 T2 모양을 변경하고 싶습니다.

결과를 데이터 프레임이 아닌 배열로 원합니다.

제안 사항? 내가 reshape 패키지에서 용융/캐스트를 사용하여 시도했지만 원하는 수식을 지정하는 방법을 이해할 수 없습니다.

답변

5

t2가 314 일의 시간 간격으로 744 시간 간격의 배열 인 경우 "744 행과 다른 크기가 있습니까? (ncol이 744인지 또는 Nrow가 744인지 여부는 알려주지 않았습니다. nrow)

array(tc, , dim =c(31, 24, nrows, ncols)) 

, 다른 한편으로는, 그것은이라면 [nrow,으로 ncols, 744] 당신은 행 위와되고 그것을 개주에 aperm를 사용할 수 있습니다

array(aperm(tc, c(3,1,2)) , dim =c(31, 24, nrows, ncols)) 

패키지가있다 'rowMax'와 'rowMin'함수를 가지고 있습니다.이 함수는 여러분이 발명 할 필요가없는 벡터화 된 접근법을 제공합니다. Bioconductor 저장소의 Biobase 패키지.)

+0

감사합니다. 시간은 일 수보다 빠르게 변하기 때문에, 대신에'array (aperm (t2, dim = c (3,1,2)), dim = c (24, 31, nrows, ncols))' . –