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

R使用summarise生成BMI分类表返回逻辑值而非数值的解决方法

问题原因

你代码中summarise里写的BMI<25这类写法是逻辑判断表达式,运行后只会返回TRUE/FALSE的布尔值,不会自动提取符合条件的BMI数值;同时原代码的区间判断存在边界漏洞,会漏掉临界值。

修改方案

通过逻辑条件索引筛选提取对应分类的BMI值,用列表列存储多个匹配值,同时修正区间边界,修改后代码如下:

weight %>% 
  select(Id, BMI) %>% 
  # 若需要按Id分组统计每个用户的各分类BMI数据则保留此行,统计全量数据则删除
  group_by(Id) %>% 
  summarise(
    healthy = list(BMI[BMI < 25]),
    not_obese = list(BMI[BMI >= 25 & BMI < 30]),
    low_risk_obesity = list(BMI[BMI >= 30 & BMI < 35]),
    moderate_risk_obesity = list(BMI[BMI >= 35 & BMI < 40]),
    High_risk_obesity = list(BMI[BMI >= 40]),
    count_records = n(),
    .groups = "drop"
  ) %>% 
  View()
关键说明
  • BMI[判断条件]是R基础的索引写法,会直接返回符合判断条件的BMI数值,外层套list()是因为单个分类下可能匹配多个值,存在列表列中即可实现“单元格内存放多个数值”的效果,和你给出的示例格式一致。
  • 原代码的区间判断存在缺口:比如漏掉了BMI=25、29.9<BMI<30这类临界值,调整为左闭右开区间后所有BMI值都能被正确归类,不会出现遗漏。
  • 新增.groups = "drop"参数,会在summarise计算完成后自动解除分组,避免后续数据处理受残留分组影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:09:18