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

如何在R中实现角色切换时计算BMI差值?

基于角色切换计算BMI差值

这里给你两种实现方式,分别用dplyr包和基础R来完成需求:

示例数据

df <- data.frame(role = c("Mother", "Mother", "Mother", "Mother", "Child", "Mother", "Mother", "Child"),
                 bmi = c(22, 19, 21, 20, 17, 23, 22, 16))

方法1:用dplyr包(简洁高效)

library(dplyr)

df_result <- df %>%
  # 标记当前行与前一行的role是否发生切换
  mutate(role_switched = role != lag(role)) %>%
  # 仅在角色切换时计算前一行BMI减当前行BMI,其余行填充NA
  mutate(diff = ifelse(role_switched, lag(bmi) - bmi, NA)) %>%
  # 移除临时辅助列
  select(-role_switched)

print(df_result)

输出结果与需求完全匹配:

role bmi diff
1 Mother  22   NA
2 Mother  19   NA
3 Mother  21   NA
4 Mother  20   NA
5  Child  17    3
6 Mother  23   -6
7 Mother  22   NA
8  Child  16    6

方法2:基础R实现(无需额外包)

如果不想加载第三方包,用循环也能实现:

# 先初始化diff列为NA
df$diff <- NA

# 从第2行开始遍历,判断角色是否切换并计算差值
for(i in 2:nrow(df)){
  if(df$role[i] != df$role[i-1]){
    df$diff[i] <- df$bmi[i-1] - df$bmi[i]
  }
}

print(df)

核心逻辑说明

两种方法的思路一致:

  1. 识别相邻行的role是否发生变化;
  2. 仅在角色切换的行计算前一行与当前行的BMI差值,未切换的行保留NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:43:30