2015-07-13 2 views
0

Так что у меня этот NetCDF файл:Как я могу подмножить данные из файла netcdf?

1] "file test.nc has 2 dimensions:" 
[1] "Time Size: 216" 
[1] "ID Size: 36" 
[1] "------------------------" 
[1] "file test.nc has 1 variables:" 
[1] "float Q[ID,Time] Longname:Q Missval:1e+30" 

Все, что я хочу сделать, это дать ему один идентификатор (скажем, 100300). И прочитать определенный период времени (скажем, от 4 до 20) временного шага

library(ncdf) 
ncfile<-nc<-open.ncdf("test.nc") 
varcomid <- get.var.ncdf(ncfile,varid = "ID") 
vartime <- get.var.ncdf(ncfile,varid = "Time") 
ndims = ncfile$var[['Q']]$ndims 
varsize = ncfile$var[['Q']]$varsize 
comid<-which(ncfile$dim$ID$vals == 100300) 

start=c(comid,4) 
count = c(varsize[1], varsize[2]) 

dat<-get.var.ncdf(nc=ncfile,varid="Q",start,count) 

Я не в состоянии закончить логику конечного временного шага.

Кроме того, я получаю эту ошибку: функция C R_nc_get_vara_double возвратил ошибку

Диагностика с помощью комментарии

start=c(comid,4) 
count = c(varsize[2], varsize[1]) 

dat<-get.var.ncdf(nc=ncfile,varid="Q",start,count) 

Error in R_nc_get_vara_double: NetCDF: Start+count exceeds dimension bound 
Var: Q Ndims: 2 Start: 3,27Count: 36,216Error in get.var.ncdf(nc = ncfile, varid = "Q", start, count) : 
    C function R_nc_get_vara_double returned error 
+0

Если не это будет 'начать = c (4, comid) 'и' count = c (varsize [2], varsize [1]) '? Первое измерение - «ID», а второе - «Время». –

+0

Я не знал, что это было наоборот, чем кажется. новичок в netcdf формате ... Позвольте мне попробовать. Кроме того, как включить логику конечного времени. В принципе, я хочу включить время между 4:25 (скажем) – maximusdooku

+0

Вы не можете сказать время окончания. Конечное время рассчитывается в соответствии с началом и счетом: 'end = start + count'. –

ответ

1

Это работает:

library(ncdf) 
ncfile <- nc<-open.ncdf("test.nc") 
varcomid <- get.var.ncdf(ncfile,varid = "COMID") 
vartime <- get.var.ncdf(ncfile,varid = "Time") 
ndims <- ncfile$var[['Qout']]$ndims 
varsize <- ncfile$var[['Qout']]$varsize 
comid <- which(varcomid == 1439445) 

start <- c(comid, 4) 
count <- c(1, varsize[2] - start[2]) 

dat <- get.var.ncdf(nc = ncfile,varid = "Qout", start = start, count = count) 
+0

Спасибо. В сторону: как я могу использовать этот dat в ggplot2? У меня возникают проблемы с построением графика, поскольку это не кадр данных. Я попытался as.data.frame, но он все еще не работает ... – maximusdooku

+0

Я могу просто сделать сюжет (dat). Но мне нужен ggplot2 для большего контроля. – maximusdooku

+0

Я получил его. Неважно. :) x = seq (1, length (dat)) – maximusdooku

Смежные вопросы