将ASCII格式的海面温度文本文件导入R

emb*_*len 5 r time-series temperature bigdata

我已经下载了多个.txt.gz文件用于Hadley海表温度观测。数据已解压缩,从而产生了多个ASCII格式的 .txt文件。
我有以下文件(R脚本是我正在处理的文件):

list.files()
 [1] "Get_SST_Data.R"                "HadISST1_SST_1931-1960.txt"    "HadISST1_SST_1931-1960.txt.gz"
 [4] "HadISST1_SST_1961-1990.txt"    "HadISST1_SST_1961-1990.txt.gz" "HadISST1_SST_1991-2003.txt"   
 [7] "HadISST1_SST_2004.txt"         "HadISST1_SST_2005.txt"         "HadISST1_SST_2006.txt"        
[10] "HadISST1_SST_2007.txt"         "HadISST1_SST_2008.txt"         "HadISST1_SST_2009.txt"        
[13] "HadISST1_SST_2010.txt"         "HadISST1_SST_2011.txt"         "HadISST1_SST_2012.txt"        
[16] "HadISST1_SST_2013.txt"    
Run Code Online (Sandbox Code Playgroud)

我希望能够利用温度数据为1950年以来每天的海面温度创建一个数值矢量,从而最终绘制一个时间序列图。

看起来像这样

在此处输入图片说明

[ps这仅供参考...]

提前致谢!

小智 3

[编辑:仅在 Linux 上测试]

R 能够读取 NetCDF 格式(http://www.metoffice.gov.uk/hadobs/hadisst/data/HadISST_sst.nc.gz)。解压后可以使用“raster”包读取这些数据,如:

library(raster)
library(xts)
library(caTools)    
Run Code Online (Sandbox Code Playgroud)

一些时间定义:

startYear <- 1950   # start of the period
endYear <- 2011     # end of the period
subp <- '1951-01-01/1980-12-01'   # period for the climatology calculation
Run Code Online (Sandbox Code Playgroud)

打开文件:

sst <- brick('HadISST_sst.nc')
Date <- substr(names(sst),2,11) 
Date <- gsub('\\.', '\\-', Date)
Date <- as.Date(Date)
dstart <- paste(startYear,'01','01',sep='-'); dstart <- grep(dstart, Date)
dend <- paste(endYear,'12','01',sep='-'); dend <- grep(dend, Date)
sst <- subset(sst, dstart:dend)
Date <- Date[dstart:dend]
Run Code Online (Sandbox Code Playgroud)

提取特定点的时间序列(lat=35,lon=120):

tserie <- as.vector(extract(sst, cbind(116, -35)))
tserie <- xts(tserie, order.by=Date)
Run Code Online (Sandbox Code Playgroud)

计算 subp 周期的气候:

clim <- as.numeric()
for(ii in 1:12){
  clim[ii] <- mean(tserie[subp][(.indexmon(tserie[subp])+1) == ii])
}
clim <- xts(rep(clim, length(tserie)/12), order.by=Date)
Run Code Online (Sandbox Code Playgroud)

计算异常值:

tserie <- tserie - clim
Run Code Online (Sandbox Code Playgroud)

绘制结果:

par(las=1)
plot(tserie, t='n', main='HadISST')
lines(tserie, col='grey')
lines(xts(runmean(tserie, 12), order.by=Date), col='red', lwd=2)
legend('bottomleft', c('Monthly anomaly','12-month moving avg'), lty=c(1,1), lwd=c(1,2), col=c('grey','red'))
Run Code Online (Sandbox Code Playgroud)