2015-04-05 51 views
0

我想先说我不是程序员,我只是试图存储数据,以便自己易于阅读。编写一个循环来存储r中的很多数据变量

我刚刚下载的天气数据的大.NC文件,我想从文件中提取数据,并将其存储在.csv格式,所以我可以很容易地在Excel中它查看。数据的问题在于它包含53个具有三个“维度”的变量:纬度,经度和时间。我写了一些代码只采取一定的经纬度和每个时间戳,所以我为每个变量(有一个经度和纬度,但每个时间戳)获得一个很好的列。我的问题是我想让循环为R中的每个变量存储一个不同的(任意)对象的列,这样我只需运行一次,然后用write.csv将所有数据写入一个.csv文件功能。

这里是我到目前为止,其中janweather是.NC文件编写的代码。

while(j <= 53){ 
v1 <- janweather$var[[j]] 
varsize <- v1$varsize 

ndims <- v1$ndims 
nt <- varsize[ndims] # Remember timelike dim is always the LAST dimension! 
j <- j +1; 
for(i in 1:nt) { 
    # Initialize start and count to read one timestep of the variable. 
    start <- rep(1,ndims) # begin with start=(1,1,1,...,1) 
    start[1] <- i 
    start[2] <- i# change to start=(i,i,1 
    count <- varsize # begin w/count=(nx,ny,nz,...), reads entire var 
    count[1] <- 1 
    count[2] <- 1 
    data3 <- get.var.ncdf(janweather, v1, start=start, count=count) 
} 
} 

下面是print.ncdf(janweather)NC文件的详细信息:

[1] "file netcdf-atls04-20150304074032-33683-0853.nc has 3 dimensions:" [1] "longitude Size: 240" [1] "latitude Size: 121" [1] "time Size: 31" [1] "------------------------" [1] "file netcdf-atls04-20150304074032-33683-0853.nc has 53 variables:" 

我的主要目标是让由get.var.ncdf函数以不同的名称保存的所有变量。现在我意识到它只是覆盖'data3'直到它到达最后一个变量,所以我所完成的工作是将data3写入最后一个变量。我想认为有一个简单的解决方案,但我不确定如何生成字符串来存储变量。

再次,我不是一个程序员,所以我很抱歉,如果有的话,我说没有任何意义,我不是在行话或任何十分精通。

感谢您提供的任何和所有帮助!

+1

实际上,为此使用栅格函数要容易得多。我假设你正在使用ncdf?你可以发布结果print.ncdf(NC)? – mdsumner 2015-04-05 21:53:19

+0

当然,结果如下:[1]“文件netcdf-atls04-20150304074032-33683-0853.nc有3个维度:” [1]“经度大小:240” [1]“纬度大小:121” [ 1]“time Size:31” [1]“------------------------” [1]“file netcdf-atls04-20150304074032- 33683-0853。nc有53个变量:“然后继续列出变量short和longnames以及它们的缺失值,它们全部是-32767 – 2015-04-05 21:56:34

+0

并且是的,我正在使用ncdf软件包 – 2015-04-05 21:57:58

回答

0

如果您不是程序员,只想获取csv格式的变量,则可以使用NCO commands。有了这个命令,你可以对netcdf文件进行多种操作。

因此,使用命令ncks,您可以输出具有特定维度切片的变量的数据。

ncks -H -v latitude janweather.nc 

该命令将在屏幕上列出纬度变量中的值。

ncks -s '%f ,' -H -v temperature janweather.nc 

此命令将列出的可变温度的值,以及与-p参数(sprintf的样式)中指定的格式。

所以只需将输出传递给一个文件,然后在文本文件中就有变量的内容。

ncks -s '%f ,' -H -v temperature janweather.nc > temperature.csv 
相关问题