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

如何基于条件获取数据范围?case_when()使用失败的解决方案

按物种分组获取Sepal.Length的范围(命名列表形式)

你的原代码问题在于:case_when()是逐行判断返回值的函数,不具备分组聚合能力,而且你在range(.$Measure)里引用的是整个过滤后数据集的Measure列,不是按Species分组后的子集,所以每个分支返回的都是全局范围,最终结果不符合预期。

下面是两种符合需求的实现方式:

方法一:分组聚合后转命名列表

library(tidyverse)

dat <- iris %>%
  as_tibble() %>%
  pivot_longer(!Species, names_to = "Variable", values_to = "Measure")

result <- dat %>%
  filter(Variable == "Sepal.Length") %>%
  group_by(Species) %>%
  summarize(range = list(range(Measure))) %>% # 按组计算范围并保留为列表
  deframe() # 把两列转成命名列表结构

print(result)

输出结果:

$setosa
[1] 4.3 5.8

$versicolor
[1] 4.9 7.0

$virginica
[1] 4.9 7.9

方法二:拆分数据后批量计算

如果偏好更直接的拆分-计算逻辑,可以用split()结合map():

dat %>%
  filter(Variable == "Sepal.Length") %>%
  split(.$Species) %>% # 按物种拆分数据框为列表
  map(~ range(.x$Measure)) # 对每个子数据框计算范围

这个写法会直接生成你需要的命名列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:25:44