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

在R中如何根据多条件将数值得分列转换为新的分组列

分组需求实现方案

实现思路

  • 先提取所有非0的得分值,单独计算该子集的33%、66%分位数,避免0值干扰分位数计算结果
  • 对全量数据按规则生成分组列:得分=0标记为none,非0得分对照提前算出的分位数阈值,分别标记为low/middle/high
  • 分位数计算默认忽略缺失值,若你的数据存在缺失得分,可提前过滤或增加缺失值分支处理,避免影响后续Kaplan-Meier分析准确性

R 实现(适配生存分析场景)

# 加载依赖包
library(dplyr)

# 示例数据,替换为你自己的实际数据框即可
df <- data.frame(
  score = sample(c(0, runif(1000, 1, 1000)), size = 1500, replace = TRUE)
)

# 计算非0得分的分位数阈值
non_zero_score <- df$score[df$score > 0]
quantile_thres <- quantile(non_zero_score, probs = c(0.33, 0.66), na.rm = T)

# 生成分组列
df <- df %>%
  mutate(
    Score_status = case_when(
      score == 0 ~ "none",
      score <= quantile_thres[1] ~ "low",
      score <= quantile_thres[2] ~ "middle",
      TRUE ~ "high"
    )
  )

# 验证分组分布
table(df$Score_status, useNA = "ifany")

Python 实现(适配生存分析场景)

import pandas as pd
import numpy as np

# 示例数据,替换为你自己的实际数据框即可
df = pd.DataFrame({
    "score": np.append(np.random.randint(1, 1000, 1000), np.zeros(500, dtype=int))
})

# 计算非0得分的分位数阈值
non_zero_score = df.loc[df["score"] > 0, "score"]
q33, q66 = non_zero_score.quantile([0.33, 0.66])

# 生成分组列
conditions = [
    df["score"] == 0,
    df["score"] <= q33,
    df["score"] <= q66
]
labels = ["none", "low", "middle"]
df["Score_status"] = np.select(conditions, labels, default="high")

# 验证分组分布
print(df["Score_status"].value_counts(dropna=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:06