У меня есть большой файл NetCDF с данными об атмосферных частицах PM10. Вы можете загрузить здесь. проблема.
Этот файл ncdf содержит 8 подобных переменных.
[1] "file ~/Downloads/2012_03_05_PM10_surface.nc has 8 dimensions:"
[1] "data_num Size: 683016"
[1] "ncl1 Size: 683016"
[1] "obsnum_urban Size: 250"
[1] "ID_LAT_LON Size: 3"
[1] "obsnum_road Size: 33"
[1] "obsnum_background Size: 5"
[1] "obsnum_rural Size: 16"
[1] "ncl7 Size: 683016"
[1] "------------------------"
[1] "file ~/Downloads/2012_03_05_PM10_surface.nc has 8 variables:"
[1] "int TMSID[data_num] Longname:TMSID Missval:NA"
[1] "int TIME[ncl1] Longname:TIME Missval:NA"
[1] "float PM10[data_num] Longname:PM10 Missval:1e+30"
[1] "float urban[ID_LAT_LON,obsnum_urban] Longname:urban Missval:1e+30"
[1] "float road[ID_LAT_LON,obsnum_road] Longname:road Missval:1e+30"
[1] "float background[ID_LAT_LON,obsnum_background] Longname:background Missval:1e+30"
[1] "float rural[ID_LAT_LON,obsnum_rural] Longname:rural Missval:1e+30"
[1] "int TMS_JULIAN[ncl7] Longname:TMS_JULIAN Missval:NA"
Здесь меня интересуют только 4 переменные. Они есть:
TIMSID — это количество участков (включает городской участок, сельский участок, дорогу, фон и т. д.)
городской :: количество городских объектов [городской является 3 строки 250 столбцов матрицы. строка 1 — количество городских объектов, строка 2 — широта, строка 3 — долгота.]
ВРЕМЯ :: данные были собраны с 1 марта 2012 г., 01:00 по май 2012 г. [кодировка «время» — ГГГГММДДЧЧ]
PM10 :: почасовая концентрация твердых частиц измеряется на каждой станции каждого объекта
Из этого файла ncdf я уже выделил значения PM10 только для городских объектов на 1 марта 2012 г., 1:00 (2012030101). Здесь, как вы знаете, TMSID — это идентификатор всего сайта, но я хотел создать подмножество только для городских сайтов (а не для сельских, дорожных и т. д.), поэтому я сопоставил только городской идентификатор из TMSID для 1 марта 2012 года, 1:00. Это означает, что у меня есть подмножество только данных PM10 за 1 час за 1 март для городских объектов. Я использовал следующий код:
library(ncdf)
nc<-open.ncdf("2012_03_05_PM10_surface.nc")
print(nc)
urban<-get.var.ncdf(nc,"urban")
time<-get.var.ncdf(nc,"TIME")
pm10<-get.var.ncdf(nc,"PM10")
tmsid<-get.var.ncdf(nc,"TMSID")
urban<-as.data.frame(t(urban))
colnames(urban)<-c("ID","LAT","LON")
urban311<-lapply(urban$ID,
function(x)data.frame(ID=x,time=2012030101,
PM10=pm10[tmsid%in%x &
time%in%2012030101]))
urban311<-do.call(rbind,urban311)
urban311<-merge(urban311,urban,by="ID")
urban311
urban311<-subset(urban311,select=c("time","ID","LAT","LON","PM10"))
seoul311<-subset(urban311, LAT>=36.8 & LAT <=38 & LON>=126.4 & LON<= 127.3)
rownames(seoul311)<-NULL
В последних двух строках вышеприведенного кода у меня есть подмножество значений PM10 только для определенной области городских объектов в соответствии с широтой и долготой. и, наконец, я получил такой кадр данных.
time ID LAT LON PM10
1 2012030101 111121 37.56464 126.9760 42
2 2012030101 111123 37.57203 127.0050 37
.
.
.
106 2012030101 831153 37.49195 126.7533 68
107 2012030101 831154 37.52662 126.8064 57
Как вы знаете, это фрейм данных только за 1 марта 1:00 ночи. Теперь я хочу проделать ту же работу за каждый час с 1 марта до 7 марта. Это означает, что я хочу получить (7 * 24) кадр данных. Как я могу сделать это эффективно?
Пожалуйста, спросите меня, есть ли у вас дополнительные вопросы. Заранее спасибо.
urban311
и просто изменитьtime%in%2012030101
наtime%in%2012030102
,time%in%2012030103
и т. д.? оберните эти строки в функцию, верните набор данных и используйтеlapply
для получения списка кадров данных за каждый час. это сработает? - person rawr   schedule 16.07.2015raster
. Это потрясающе. В этом случае все было бы намного проще. Его документация превосходна. Кроме того, рассмотрите возможность использованияncdf4
вместоncdf
. - person AF7   schedule 17.07.2015