如何提取表的特定元素

时间:2015-09-07 14:40:39

标签: r

我是R的新用户,我正在寻找一个脚本来提取表的特定列和行。我有一个沉淀文件格式" .nc"已下载到气候研究单位,已转换为" .txt"。这些数据是从每个月的1901年到2014年记录的,我想只有一张表格,显示例如1988年的数据(将显示纬度,经度和12个月的记录)。谢谢。

2 个答案:

答案 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文件。您可以看到此文件包含属性latitudelongitudetimestatus_length,以及两个响应变量:temperature_anomalyfield_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]