在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
相关产品推荐
相关产品推荐

