我是R的新用户,我正在寻找一个脚本来提取表的特定列和行。我有一个沉淀文件格式" .nc"已下载到气候研究单位,已转换为" .txt"。这些数据是从每个月的1901年到2014年记录的,我想只有一张表格,显示例如1988年的数据(将显示纬度,经度和12个月的记录)。谢谢。
答案 0 :(得分:0)
你的问题很模糊,所以很难帮助你。您说您已将ncdf
文件转换为文本文件。怎么样?该文件的格式是什么(行中有什么?列?)?我们怎么知道?
然而,这应该让你开始。
library(ncdf)
url <- "http://www.cru.uea.ac.uk/cru/data/temperature/CRUTEM.4.4.0.0.anomalies.nc"
tf <- tempfile()
download.file(url, tf, mode="wb")
nc <- open.ncdf(tf)
nc
# [1] "file C:\\Users\\jlh\\AppData\\Local\\Temp\\RtmpgPupyr\\filed2c1853163f has 4 dimensions:"
# [1] "latitude Size: 36"
# [1] "longitude Size: 72"
# [1] "time Size: 1987"
# [1] "field_status_string_length Size: 1"
# [1] "------------------------"
# [1] "file C:\\Users\\jlh\\AppData\\Local\\Temp\\RtmpgPupyr\\filed2c1853163f has 2 variables:"
# [1] "float temperature_anomaly[longitude,latitude,time] Longname:temperature_anomaly Missval:-1.00000001504747e+30"
# [1] "char field_status[field_status_string_length,time] Longname:field_status Missval:NA"
x <- get.var.ncdf(nc, "longitude")
y <- get.var.ncdf(nc, "latitude")
t <- get.var.ncdf(nc, "time")
z <- get.var.ncdf(nc, "temperature_anomaly")
str(z)
# num [1:72, 1:36, 1:1987] NA NA NA NA NA NA NA NA NA NA ...
因此,此代码使用R中的ncdf
包来从东英吉利大学(http://www.cru.uea.ac.uk/data)的气候研究单元下载温度异常ncdf
文件。您可以看到此文件包含属性latitude
,longitude
,time
和status_length
,以及两个响应变量:temperature_anomaly
和field_status
。
对get.var.ncdf(...)
的调用会提取经度,纬度和时间尺度,然后提取实际数据。后者是一个三维矩阵,z
(一个维度为lat,一个为长,一个为时间)。
我从你的问题中收集到你想要一个“表格”(在R中不是一个有意义的想法)显示一个响应(我为这个例子选择了临时异常),以及每个组合的lat,long和date纬度/长度和1988年的每个月。但我只是在这里猜测,因为你真的没有告诉我们什么。
所以这实际上是将矩阵z
转换为上述格式的练习。我们可以使用melt(...)
包中的reshape2
轻松完成此操作(阅读文档)。唯一棘手的问题是解释time
。根据CRU网站的说法,时间存储为自1850-01-01以来的天数(你从哪里得到1900?),增量为29.5天(所以每月一点。下面的第2:4行转换为年(例如,1988年)到z
的时间维度的索引向量。
library(reshape2) # for melt(...)
yr <- 1988
st <- (yr-1850)*12+1
indx <- st:(st+11)
m <- z[,,indx]
dimnames(m) <- list(x,y,strftime(as.Date("1850-01-01")+t[indx],format="%b-%Y"))
result <- melt(m, varnames=c("longitude", "latitude", "date"), value.name="temp")
# longitude latitude date temp
# 1 -177.5 -87.5 Jan-1988 NA
# 2 -172.5 -87.5 Jan-1988 NA
# 3 -167.5 -87.5 Jan-1988 NA
# 4 -162.5 -87.5 Jan-1988 NA
# 5 -157.5 -87.5 Jan-1988 NA
# 6 -152.5 -87.5 Jan-1988 NA
答案 1 :(得分:0)
[String]