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

在R语言dplyr的mutate中实现类VLOOKUP的多条件差值计算

用dplyr自动匹配对应交通方式的slow变体速度并计算差值

核心思路

通过分组提取基准值或关联基准数据集的方式,替代手动case_when输入,自动匹配每个交通方式下variant = "slow"的速度,再计算当前行速度与该基准值的差值。


步骤1:构造示例数据

先模拟你的数据集:

library(dplyr)

df <- tibble(
  mode_of_travel = rep(c("car", "bike", "bus"), each = 3),
  variant = rep(c("slow", "medium", "fast"), 3),
  speed = c(30, 50, 80, 15, 25, 35, 20, 30, 45)
)

方法1:分组提取基准值(推荐)

按mode_of_travel分组后,直接提取组内variant = "slow"的速度值(会自动广播到组内所有行),再计算差值:

df_result <- df %>%
  group_by(mode_of_travel) %>%
  mutate(
    slow_speed = speed[variant == "slow"],  # 提取当前组的slow速度
    speed_diff = speed - slow_speed         # 计算差值
  ) %>%
  ungroup()

# 查看结果
print(df_result)

如果存在部分交通方式没有slow变体的情况,可添加缺失值处理:

df_result <- df %>%
  group_by(mode_of_travel) %>%
  mutate(
    slow_speed = speed[variant == "slow"],
    slow_speed = replace_na(slow_speed, 0),  # 用0替代缺失值,可按需调整
    speed_diff = speed - slow_speed
  ) %>%
  ungroup()

方法2:关联基准数据集

先单独提取所有交通方式的slow速度,再通过left_join关联到原数据,最后计算差值:

# 提取各交通方式的slow速度基准
slow_speed_ref <- df %>%
  filter(variant == "slow") %>%
  select(mode_of_travel, slow_speed = speed)

# 关联并计算差值
df_result <- df %>%
  left_join(slow_speed_ref, by = "mode_of_travel") %>%
  mutate(speed_diff = speed - slow_speed)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:05:22