【问题标题】:Extract monthly and yearly temperature data from an NC file从 NC 文件中提取月度和年度温度数据
【发布时间】:2019-06-21 16:37:44
【问题描述】:

我已经下载了一个包含长期 (1992-01-01 to 2016-12-31) 温度数据的 NC 文件,我想使用 R 将月平均温度和年平均温度提取到空间 TIFF 文件中,这样我就可以在我有一个 Excel 数据集,但我不知道如何。可以从here访问数据。

如果有人可以帮助我编写将被应用的编码。

我尝试使用这段代码打开并查看数据:

library(ncdf4)
library(raster)
temp <- nc_open("dataset-ibi-reanalysis-phys-005-002-monthly_1547718004288.nc",write=TRUE)


TEMP = ncvar_get(temp,"bottomT")

latitude = ncvar_get(temp,"latitude")
longitude = ncvar_get(temp,"longitude")
nc_close(temp)

【问题讨论】:

  • 您能否使用dput 展示数据样本,以获得独立于这些软件包的替代方法(如果可能)?
  • 所以我有大约 17,000 个从 2003 年到 2018 年的空间数据点,其中有许多相互重叠的空间点,一年中大部分时间的数据点,但有些日子我的数据点比其他天多。纬度最小值 43.38080 和最大值是 51.09567,经度最小值 -6.93330 和最大值是 1.88117。我会尝试计算我们的 dput。对不起,我不知道这个功能..
  • 添加 head(yourdata) 的输出以获得更直观的外观图片。 dput 可能不太有用,但仍使用 dput(head(df,20)) 添加它
  • 不,只需复制并粘贴即可。使用dput
  • 抱歉它太大了。这可能会有所帮助:'data.frame': 17070 obs。 $ trpCode:INT 773321 773321 773321 773322 773322 773341 773341 773341 773361 773361 ... $ staNum:6个变量的INT 1 2 3 1 3 2 4 5 2 3 ... $拉蒂尼:NUM 47.2 47.2 47.2 47.3 47.3 ... $ lonIni : num -2.73 -2.77 -2.77 -2.63 -2.67 ... $ date : 带 2934 个级别的因子 "2003-02-15","2003-02-16",..: 1091 1091 1091 1118 1118 931 931 932 1108 1109 ... $ PA : int 0 0 0 0 0 0 0 0 0 0 ...

标签: r mapping extraction netcat temperature


【解决方案1】:

如果您能够创建一个包含日期和温度列的 data.frame,类似于下面我的虚拟数据集,您可以轻松使用 dplyr 和 lubridate 包来获取月度和年度平均值。

使用 dplyr 的 mutate 函数将月份和年份列添加到 df 并润滑月份和年份函数

library(lubridate)
library(dplyr)
df <- data.frame(date = seq(from = ymd("2017-01-01"), to = ymd("2018-12-31"), length.out = 730),
                 temp = rnorm(n = 730, mean = 23, sd = 12))

使用 dplyr 的 mutate 函数和 lubridate 的月份和年份函数将月份和年份列添加到 df

df <- df %>% mutate(Month = month(date), Year = year(date))

df的前六行:

# date     temp         Month Year
# 2017-01-01 17.13885     1 2017
# 2017-01-02 34.23553     1 2017
# 2017-01-03 10.25110     1 2017
# 2017-01-04 11.19415     1 2017
# 2017-01-05 28.09097     1 2017
# 2017-01-06 17.58424     1 2017

您可以使用 dplyr 的 group_by 函数获取月均值,按月和年对 data.frame 进行分组,并使用 summarise 函数计算均值。

monthly_summaries <- df %>% group_by(Year, Month) %>% 
  summarise(mean_temp = mean(temp))

这是monthly_summaries data.frame的前6行

#   Year Month mean_temp
#  2017     1      22.1
#  2017     2      24.6
#  2017     3      20.5
#  2017     4      25.7
#  2017     5      21.3
#  2017     6      23.4

同理,求年均值,用group_by函数按年分组,用summary函数计算年均值。

yearly_summaries <- df %>% group_by(Year) %>% 
  summarise(mean_temp = mean(temp))

这里是年度总结 data.frame:

#Year    mean_temp
#  2017      23.0
#  2018      23.1

(或者,如果您不想在 data.frame 中添加 Month 和 Year 列,则可以使用以下代码获得相同的输出:

monthly_summaries <- df %>% group_by(Year = year(date), Month = month(date)) %>% 
    summarise(mean = mean(temp))
yearly_summaries <- df %>% group_by(Month = month(date)) %>% 
    summarise(mean = mean(temp))

)

【讨论】:

  • 感谢这个方便的摘要编码。但是,我的问题是将 nc 文件中的温度数据提取到我的数据中
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 2016-10-21
  • 2023-03-15
  • 2014-08-15
  • 2020-11-16
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多