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

R语言计算dataframe列中数值间NaN个数平均值(含/不含开头NaN)

R语言计算NDVI序列间隔NaN均值方案

样例数据构造

首先将你提供的样例数据转换为R中可直接使用的dataframe:

dataf <- structure(list(Time = c(20000224, 20000225, 20000226, 20000227, 
20000228, 20000229, 20000301, 20000302, 20000303, 20000304, 20000305, 
20000306, 20000307, 20000308, 20000309, 20000310, 20000311, 20000312, 
20000313, 20000314, 20000315, 20000316, 20000317, 20000318, 20000319, 
20000320, 20000321, 20000322, 20000323, 20000324, 20000325, 20000326, 
20000327, 20000328, 20000329, 20000330, 20000331, 20000401, 20000402, 
20000403), NDVI = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
NaN, NaN, NaN, NaN, 0.562256741, 0.560792828, 0.559272321, 0.554727235, 
NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.506596306, 0.504768168, 
0.536223787, 0.5476394, 0.520311992, 0.52862363, NaN, NaN, NaN, 
NaN, NaN, NaN, NaN, NaN, NaN, NaN)), row.names = c(NA, -40L), class = c("tbl_df", 
"tbl", "data.frame"))

实现代码

我们通过rle()函数识别连续NaN分段,再按两种逻辑筛选统计范围,封装为可直接调用的函数:

avg_nan_gap <- function(x, include_leading = FALSE) {
  # 计算序列中连续值的运行长度
  rle_res <- rle(is.na(x))
  # 提取所有NaN段和有效数值段的位置索引
  nan_seg_idx <- which(rle_res$values)
  valid_seg_idx <- which(!rle_res$values)
  
  # 边界判断:有效数值不足两段时无法计算间隔
  if (length(valid_seg_idx) < 2) {
    warning("有效数值数量小于2,无有效间隔可统计")
    return(NA_real_)
  }
  
  # 先过滤掉最后一段有效数值之后的NaN段(无后续有效数值,不属于间隔)
  filtered_nan <- nan_seg_idx[nan_seg_idx < max(valid_seg_idx)]
  # 按参数决定是否删除第一个有效数值之前的开头NaN段
  if (!include_leading) {
    filtered_nan <- filtered_nan[filtered_nan > min(valid_seg_idx)]
  }
  
  # 无符合条件的间隔时返回0
  if (length(filtered_nan) == 0) return(0)
  # 计算平均NaN个数
  mean(rle_res$lengths[filtered_nan])
}

测试效果

# 逻辑1:包含开头NaN段,样例输出为10
avg_nan_gap(dataf$NDVI, include_leading = TRUE)

# 逻辑2:仅统计有效数值之间的NaN段,样例输出为7
avg_nan_gap(dataf$NDVI, include_leading = FALSE)

代码说明

  • 核心依赖基础包的rle()函数,无需安装额外第三方包
  • 自动处理有效数值不足的边界情况,避免报错
  • 支持任意长度的NDVI时序数据,可直接复用

内容的提问来源于stack exchange,提问作者Cláudio Siva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:39:02