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

如何在R语言中仅当双向量差值小于±5时计算pm2.5修正值

在R语言中计算PM2.5修正值的实现方案

需求说明

给定如下结构的数据框:

time_stampsensor_indexhumiditytemperaturepm2.5_apm2.5_b
2022-07-15 15:00:005137737.434102.83418.20917.264
2022-07-11 22:00:005137731.267102.3677.9828.971
2022-07-11 00:00:005137743.53391.510.51812.260
2022-07-11 14:00:005137751.43395.714.16820.168

需要实现以下逻辑:

  • 仅当pm2.5_a与pm2.5_b的差值绝对值小于5时,计算二者的平均值,再代入公式:0.52*(平均值) - 0.085*humidity + 5.71得到修正值pm_cor
  • 若差值绝对值≥5,pm_cor设为空值(NA)

最终期望输出的数据框:

time_stampsensor_indexhumiditytemperaturepm2.5_apm2.5_bpm_cor
2022-07-15 15:00:005137737.434102.83418.20917.26411.75
2022-07-11 22:00:005137731.267102.3677.9828.9717.46
2022-07-11 00:00:005137743.53391.510.51812.2607.93
2022-07-11 14:00:005137751.43395.714.16820.168

实现方法

方法1:基础R实现

先构造示例数据框,再用ifelse函数完成条件判断与计算:

# 构造示例数据
df <- data.frame(
  time_stamp = c("2022-07-15 15:00:00", "2022-07-11 22:00:00", 
                 "2022-07-11 00:00:00", "2022-07-11 14:00:00"),
  sensor_index = rep(51377, 4),
  humidity = c(37.434, 31.267, 43.533, 51.433),
  temperature = c(102.834, 102.367, 91.5, 95.7),
  pm2.5_a = c(18.209, 7.982, 10.518, 14.168),
  pm2.5_b = c(17.264, 8.971, 12.260, 20.168)
)

# 计算pm_cor
df$pm_cor <- ifelse(
  abs(df$pm2.5_a - df$pm2.5_b) < 5,
  0.52 * ((df$pm2.5_a + df$pm2.5_b)/2) - 0.085 * df$humidity + 5.71,
  NA
)

# 保留两位小数匹配期望格式
df$pm_cor <- round(df$pm_cor, 2)

# 查看结果
print(df)

方法2:dplyr包实现(适合管道式操作)

如果习惯使用tidyverse生态,用mutate+case_when更直观:

library(dplyr)

# 构造示例数据
df <- data.frame(
  time_stamp = c("2022-07-15 15:00:00", "2022-07-11 22:00:00", 
                 "2022-07-11 00:00:00", "2022-07-11 14:00:00"),
  sensor_index = rep(51377, 4),
  humidity = c(37.434, 31.267, 43.533, 51.433),
  temperature = c(102.834, 102.367, 91.5, 95.7),
  pm2.5_a = c(18.209, 7.982, 10.518, 14.168),
  pm2.5_b = c(17.264, 8.971, 12.260, 20.168)
)

# 计算pm_cor
df <- df %>%
  mutate(
    pm_cor = case_when(
      abs(pm2.5_a - pm2.5_b) < 5 ~ 0.52 * ((pm2.5_a + pm2.5_b)/2) - 0.085 * humidity + 5.71,
      TRUE ~ NA_real_
    ),
    pm_cor = round(pm_cor, 2)
  )

# 查看结果
print(df)

说明

  • 两种方法均会生成与期望一致的结果,round函数用于将结果保留两位小数,匹配示例输出格式
  • 条件不满足时,pm_cor会被设为NA,在数据框中显示为空,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:45:33