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

基于多参数在palmerpenguins数据集新增分类列

基于参数表为企鹅添加多分类标签解决方案

需求说明

使用palmerpenguins数据集和独立参数表df_query,为每只企鹅新增CATEGORY列,标记为small/medium/large,要求:

  • 同时依据**喙长(bill_length_mm)和体重(body_mass_g)**两项参数判断
  • 逻辑完全依赖df_query参数表,可复现
  • 若企鹅符合多个分类的参数范围,标记所有匹配分类(逗号分隔);无匹配则标记为NA

现有尝试仅使用喙长单参数判断,未满足需求。

环境与参数表

library(tidyverse)
library(palmerpenguins)

# 分类参数表:定义各分类的喙长、体重区间
df_query <- data.frame(CATEGORY = c("small", "medium", "large"), 
                       BILL_MIN = c(30,35,44),
                       BILL_MAX = c(36,46,62),
                       MASS_MIN = c(2500,2800,3800),
                       MASS_MAX = c(2800,4000,6000))

解决方案代码

方法一:交叉连接+分组聚合(适合大规模数据)

penguins_withCATEGORY <- penguins %>%
  # 添加唯一行标识,确保分组精准
  mutate(row_id = row_number()) %>%
  # 让每只企鹅与所有分类参数配对
  cross_join(df_query) %>%
  # 筛选符合当前分类参数的记录(排除NA值避免误判)
  filter(
    !is.na(bill_length_mm), !is.na(body_mass_g),
    bill_length_mm > BILL_MIN,
    bill_length_mm <= BILL_MAX,
    body_mass_g > MASS_MIN,
    body_mass_g <= MASS_MAX
  ) %>%
  # 按企鹅分组,聚合所有匹配的分类
  group_by(row_id, across(-CATEGORY, -BILL_MIN:-MASS_MAX)) %>%
  summarise(CATEGORY = str_c(CATEGORY, collapse = ", "), .groups = "drop") %>%
  # 补回所有原始企鹅数据,无匹配的标记为NA
  right_join(penguins %>% mutate(row_id = row_number()), by = c("row_id", names(penguins))) %>%
  # 移除临时行标识
  select(-row_id)

方法二:逐行判断(代码更简洁)

penguins_withCATEGORY <- penguins %>%
  rowwise() %>%
  mutate(
    # 筛选当前企鹅符合的所有分类
    matched_cats = list(df_query$CATEGORY[
      !is.na(bill_length_mm) & !is.na(body_mass_g) &
        bill_length_mm > df_query$BILL_MIN &
        bill_length_mm <= df_query$BILL_MAX &
        body_mass_g > df_query$MASS_MIN &
        body_mass_g <= df_query$MASS_MAX
    ]),
    # 处理无匹配的情况,将多分类用逗号连接
    CATEGORY = case_when(
      length(matched_cats) == 0 ~ NA_character_,
      TRUE ~ str_c(matched_cats, collapse = ", ")
    )
  ) %>%
  ungroup() %>%
  select(-matched_cats) # 移除临时变量

代码说明

  • 两种方法均严格依据df_query的参数区间判断,修改参数表即可更新分类逻辑
  • 自动处理NA值:喙长或体重为NA的企鹅,直接标记为NA
  • 支持多分类匹配:若企鹅同时符合多个分类的参数范围,会将所有匹配分类用逗号连接显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:28:21