You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言从小时级气象数据计算周度冻融变化天数(NFCD)方案咨询

R语言实现小时级气温数据按周统计冻融变化天数(NFCD)

实现逻辑说明

冻融变化天数(NFCD)判定规则:单日最高气温>0℃且最低气温<0℃,即记为1个冻融日,按周统计对应周内所有冻融日的总和。

依赖包

使用tidyverse做数据处理、lubridate做日期时间运算,提前安装加载即可:

# 未安装先执行安装
# install.packages(c("tidyverse", "lubridate"))
library(tidyverse)
library(lubridate)

完整实现代码

# 1. 读取原始数据(如果是tsv格式用read_tsv,txt格式可调整分隔符参数)
raw_data <- read_delim(
  "你的数据文件路径.txt",
  delim = "\t", # 制表符分隔,根据实际文件分隔符调整
  col_types = cols(Date = col_date(format = "%Y-%m-%d"),
                   `Time (UTC)` = col_time(format = "%H:%M:%S"),
                   temperature = col_double())
)

# 2. 预处理,提取时间维度字段
pre_data <- raw_data %>%
  # 按日期分组统计单日最高、最低气温
  group_by(Date) %>%
  summarise(
    max_temp = max(temperature, na.rm = T), # 有缺失值时自动忽略
    min_temp = min(temperature, na.rm = T)
  ) %>%
  ungroup() %>%
  # 判定是否为冻融日
  mutate(
    is_frost_day = ifelse(max_temp > 0 & min_temp < 0, 1, 0),
    # 提取年、月、ISO周次(周次规则可调整,比如用week()函数为每年1月1日起算周次)
    year = year(Date),
    month = month(Date),
    week = isoweek(Date)
  )

# 3. 按年、月、周汇总NFCD
result <- pre_data %>%
  group_by(year, month, week) %>%
  summarise(NFCD = sum(is_frost_day, na.rm = T)) %>%
  ungroup()

# 4. 输出结果到文件,符合要求的格式
write_delim(
  result,
  "输出结果路径.txt",
  delim = "\t",
  col_names = T
)

注意事项

  • 周次计算可根据需求调整:如果需要按每年1月1日作为第一周的起始,把isoweek(Date)替换为week(Date)即可;如果需要自定义周起始日,可通过lubridate::floor_date()的week_start参数调整。
  • 若原始数据存在缺失温度值,na.rm = T参数会自动忽略缺失值计算当日最高/最低温,若不需要忽略可删除该参数。

内容的提问来源于stack exchange,提问作者abs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:15:00