2013-07-11 4 views
0

3 차원으로 netCDF 파일을 보았습니다. 첫 번째 차원은 경도이며 1-464에 도달합니다. 두 번째 차원은 위도이며 1-201에 도달합니다. 세 번째 차원은 시간이며 1-5479에 도달합니다.특정 값을 netCDF에서 추출하십시오.

이제 파일에서 특정 값을 추출하고 싶습니다. 나는 시작 인수로 그것을 처리 할 수 ​​있다고 생각한다. 나는이 명령을 시도했다.

test = open.ncdf("rr_0.25deg_reg_1980-1994_v8.0.nc") 

data = get.var.ncdf(test,start=c(1:464,1:201,1:365)) 

하지만 어떻게 든 작동하지 않습니다. 누구에게 해결책이 있습니까? 사전에

감사합니다 ...

, 내가 Unidata의 netCDF의 버전 4 라이브러리 (link)을 기반으로 업데이트 된 ncdf4 패키지를 사용하는 것이 좋습니다 당신이 할 수있는 경우 R.에 ncdf 패키지를 사용하는 것 같습니다

답변

1

.

문제로 돌아 가기. ncdf4 패키지를 사용하지만, ncdf 패키지가 같은 방식으로 작동한다고 생각합니다. get.var.ncdf 함수를 호출 할 때 추출 할 변수의 이름을 명시 적으로 제공해야합니다. 나는 당신이 names(test$var)을 사용하여 변수의 이름을 얻을 수 있다고 생각합니다.

그래서 당신이 뭔가를 할 필요가 : 당신의 문제에 대한

# Open the nc file 
test = open.ncdf("rr_0.25deg_reg_1980-1994_v8.0.nc") 

# Now get the names of the variables in the nc file 
names(test$var) 

# Get the data from the first variable listed above 
# (May not fit in memory) 
data = get.var.ncdf(test,varid=names(test$var)[1]) 

# If you only want a certain range of data. 
# The following will probably not fit in memory either 
# data = get.var.ncdf(test,varid=names(test$var)[1])[1:464,1:201,1:365] 

, 당신은 VARIABLE_NAME이 추출 할 변수 varid='VARIABLE_NAME', 위에서 varid=names(test$var)[1]를 교체해야합니다.

희망이 있습니다.

편집 :

는 내 시스템에 ncdf 패키지를 설치하고, 위의 코드는 나를 위해 작동!

+0

흠, 내 변수의 이름은 "rr"입니다. 나는 이렇게 명령에 넣는다. 데이터 = get.var.ncdf (테스트, varid = "rr"(테스트 $ var) [1]) [1 : 464,1 : 201,1 : 365] 하지만 작동하지 않습니다. 내가 바보인가? – burton030

+0

죄송합니다. 제 코드가 약간 혼란 스러웠을 것입니다.'(test $ var) [1]'부분은 필요 없습니다! 'get.var.ncdf (test, varid = "rr") [1 : 464,1 : 201,1 : 365]' – ialm

+0

또한, 먼저 get.var.ncdf (테스트, ([long, lat, time])이 정확한지 확인하기 위해'[1 : 464,1 : 201,1 : 365]'부분없이'varid = "rr" – ialm

0

CDO를 사용하여 플로팅 등을 위해 R로 읽히기 전에 R 외부의 시간 소절/날짜와 위치를 추출 할 수도 있습니다. 좌표 공간에서 직접 작업하고 시간대 또는 날짜를 직접 지정할 수있는 이점이 있습니다.

예 :

cdo seldate,20100101,20121031 in.nc out.nc 
cdo sellonlatbox,lon1,lon2,lat1,lat2 in.nc out.nc 
관련 문제