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

如何在R语言cut()函数中加入性别因素,按不同阈值划分Strength?

解决方案:按性别不同阈值划分Strength变量

要实现按性别使用不同阈值划分Strength的需求,核心是针对不同Gender值,分别应用对应的cut规则,以下是两种实用的实现方式:

基础R实现

首先构造你的数据框(方便复现测试):

Base <- data.frame(
  ID = 1:5,
  Gender = c(0,1,1,0,0),
  Strength = c(230,20,30,40,40)
)

定义一个根据性别返回划分结果的函数,再用mapply逐行应用规则:

# 定义分类函数:根据Gender选择对应的划分阈值
classify_strength <- function(strength, gender) {
  if (gender == 1) {
    # Gender=1时,阈值为28:<=28标记为Stronger,>28标记为Weaker
    cut(strength, breaks = c(-Inf, 28, Inf), labels = c("Stronger", "Weaker"))
  } else {
    # Gender=0时,阈值为10:<=10标记为Stronger,>10标记为Weaker
    cut(strength, breaks = c(-Inf, 10, Inf), labels = c("Stronger", "Weaker"))
  }
}

# 给数据框添加新变量
Base$newvariable <- mapply(classify_strength, Base$Strength, Base$Gender)

运行后查看结果:

print(Base)
#   ID Gender Strength newvariable
# 1  1      0      230      Weaker
# 2  2      1       20    Stronger
# 3  3      1       30      Weaker
# 4  4      0       40      Weaker
# 5  5      0       40      Weaker

tidyverse(dplyr)实现

如果你习惯用tidyverse工具链,可以用case_when实现条件化的cut操作:

library(dplyr)

Base <- Base %>%
  mutate(
    newvariable = case_when(
      Gender == 1 ~ cut(Strength, breaks = c(-Inf, 28, Inf), labels = c("Stronger", "Weaker")),
      Gender == 0 ~ cut(Strength, breaks = c(-Inf, 10, Inf), labels = c("Stronger", "Weaker")),
      TRUE ~ NA_character_ # 处理未定义的Gender值(可选)
    )
  )

关键说明

  • 用-Inf和Inf作为breaks的边界,可以覆盖所有可能的Strength数值(比如数据中230这种远大于阈值的情况)
  • 两种方法本质都是按Gender分组应用不同的cut规则,解决了你原代码中统一阈值的问题

内容的提问来源于stack exchange,提问作者MARCOS OLVERA ROJAS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:12:11