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

在R语言中如何提取与降水最大值对应时刻的温度数据?

解决方案(R语言)

假设你的降水数组precip和温度数组temp维度一致,最后一维代表小时(比如维度为[站点数, 天数, 小时数]),可以按以下步骤实现需求:

1. 定位降水最大值对应的小时索引

使用apply()函数对除最后一维外的所有维度批量处理,每个维度组合下用which.max()找到降水最大值所在的小时位置:

# 构造示例数组(3个站点、2天、24小时)
set.seed(123)
precip <- array(rnorm(3*2*24, mean=5), dim = c(3, 2, 24))
temp <- array(rnorm(3*2*24, mean=20), dim = c(3, 2, 24))

# 获取每个(站点, 日期)组合下,降水最大值的小时索引
max_hour_idx <- apply(precip, MARGIN = 1:(length(dim(precip))-1), which.max)
  • MARGIN = 1:(length(dim(precip))-1):指定对前n-1维(这里是站点、日期)进行遍历,每个遍历单元是该组合下的所有小时降水数据。
  • which.max():返回当前单元中最大值的第一个出现位置(如果有多个相同最大值,只会取第一个)。

2. 提取对应时刻的温度数据

将第一步得到的小时索引转换为数组的完整下标,再用该下标提取温度数据:

# 生成前n-1维的所有位置下标
dim_indices <- arrayInd(1:length(max_hour_idx), dim(max_hour_idx))

# 组合成完整的三维下标矩阵(站点, 日期, 小时)
full_indices <- cbind(dim_indices, as.vector(max_hour_idx))

# 提取对应温度并恢复维度
temp_max_hour <- temp[full_indices]
dim(temp_max_hour) <- dim(max_hour_idx)

最终temp_max_hour的维度和max_hour_idx一致(示例中是3×2),每个值对应对应站点、日期下,降水最大时刻的温度。

补充:处理多个最大值的情况

如果需要保留所有降水最大值对应的温度(而非仅第一个),可以把which.max()替换为自定义函数:

# 获取所有最大值的小时索引(返回列表)
all_max_hour_idx <- apply(precip, MARGIN = 1:(length(dim(precip))-1), 
                          function(x) which(x == max(x)))

# 提取所有对应温度(结果为列表,每个元素是该组合下的温度向量)
temp_all_max_hour <- mapply(function(idx, pos) temp[pos[1], pos[2], idx], 
                            all_max_hour_idx, 
                            split(dim_indices, 1:nrow(dim_indices)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:55:21