2016-12-02 6 views
0

좌표가 수반 된 여러 스테이션이 포함 된 .txt 파일이 있습니다. 그림과 같이, 스테이션 ID로 하나, 위도와 하나 경도와 하나 : 그래서, .txt 파일은 세 개의 열이 또한동시에 여러 위치에 대한 시계열 추출 및 별도의 파일에 저장

station , lat , lon 
ABTR2100 ,39.13,34.52 
GRMR0100 ,20.18,49.00 
DDDD0100 ,23.22,46.81 
SLPT0100 ,26.91,32.23 
NDRT0100 ,29.55,48.97 

, 나는 2011 년 3 월 시간당 온도 데이터를 포함하는 .nc 파일이 . .nc 파일의 구조는 다음

2 variables (excluding dimension variables): 
    char rotated_pole[] 
     grid_mapping_name: rotated_latitude_longitude 
     grid_north_pole_latitude: 39.25 
     grid_north_pole_longitude: -162 
    float var11[rlon,rlat,height,time] 
     table: 2 
     grid_mapping: rotated_pole 
4 dimensions: 
    rlon Size:848 
     standard_name: grid_longitude 
     long_name: longitude in rotated pole grid 
     units: degrees 
     axis: X 
    rlat Size:824 
     standard_name: grid_latitude 
     long_name: latitude in rotated pole grid 
     units: degrees 
     axis: Y 
    height Size:1 
     standard_name: height 
     long_name: height 
     units: m 
     positive: up 
     axis: Z 
    time Size:744 *** is unlimited *** 
     standard_name: time 
     units: hours since 2011-02-28 18:00:00 
     calendar: proleptic_gregorian 

은 내가 무엇을하고자하는 각 시간 단계의 .txt 파일에 포함 된 스테이션의 각 하나에 대한 시계열을 추출하고, 시간을 저장하다 시리즈를 스테이션 ID의 이름을 가진 별도의 .txt 파일에 추가하십시오. 즉, 특정 위치에 대한 시계열을 포함하는 "ABTR2100_temp"라는 .txt 파일을 갖게됩니다. 모든 방송국에서도 마찬가지입니다. 내가 R에서 이것을 할 수 있을까?

+1

* .nc 파일에서 읽을 수 있도록'ncdf' 패키지를 올바르게 시도해 볼 수 있습니다. –

+0

Paul Hiemstra, R에서 래스터 패키지를 사용하여 추출을 적용하고 .nc 파일을 브릭으로 읽은 다음 "추출"명령을 사용하여 내 포인트에 대한 시간 계열을 계산하지만이 솔루션은 그렇지 않습니다. 내가 원하는 것을 줘. 각 위치에 대한 파일을 분리하고 파일의 이름을 스테이션 ID로 저장하기 위해 시계열을 저장하려고합니다. – marika

+0

A.Val, .nc 파일을 올바르게 읽는 데는 문제가 없지만 시계열을 추출하여 파일을 별도의 파일로 저장하여 파일의 이름에 스테이션의 ID 이름을 할당하십시오! – marika

답변

1

방송국 좌표를 데이터 프레임으로 읽습니다. 방송국 이름 변환을 비활성화하여 stringsAsFactor 인수를 사용하지 않도록 설정합니다.

yourstations <- read.csv("yourstations.txt", stringsAsFactor = FALSE) 

ncdf4 패키지의 도움으로 작업 공간에 연결로 데이터를로드합니다. 모든 것이 정상인지 확인하십시오.

library(ncdf4) 
nc.filename <- "yourdata.nc" 
yourconn.nc <- nc_open(nc.filename) 
yourconn.nc 

그리드 위도와 경도의 값을 가져옵니다.

lon <- ncvar_get(yourconn.nc,"rlon") 
lat <- ncvar_get(yourconn.nc,"rlat") 

방송국의 모든 데이터 프레임 행에 for 루프를 사용하십시오. for 루프를 사용하면 가장 가까운 위도와 경도를 찾고 행 - 열 수를 기반으로 하나의 격자 점 (sta.temp)에 대한 모든 값을 얻습니다. 방송국 이름으로 씁니다.

for(ttnum in 1:nrow(yourstations)){ 
    ## Find the closes lat  
    lat.diff <- abs(lat - yourstations[ttnum, "lat"]) 
    lat.nr <- which(lat.diff == min(lat.diff))[1] 
    ## Find the closes lon 
    lon.diff <- abs(lon - yourstations[ttnum, "lon"]) 
    lon.nr <- which(lon.diff == min(lon.diff))[1] 
    ## Copy data of the gridpoint 
    sta.temp <- ncvar_get(yourconn.nc, "var11", c(lon.nr,lat.nr,1,1),c(1,1,1,744)) 
    ## Write the vector 
    write(sta.temp, file = paste0(yourstations[ttnum, "station"],"_temp.txt"), ncol = 1) 
} 

나는 당신이 당신의 회전 좌표로 원활하게 작업 할 수 있는지 모르겠습니다 (netcdf4 패키지 raster을 통해 사용되는 질문 Extracting site-specific information from NetCDF file in R 참조).