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

R语言:基于多列数据的分组标记需求实现

按指定规则为DataFrame生成分组列

需求概述

基于现有DataFrame的col1、col2、col3三列,为entity列分配分组并新增Group_col1、Group_col2、Group_col3三列,规则如下:

  • 分组固定为6组,标记为5、4、3、2、1、0
  • 每列分组逻辑:
    1. 计算该列的中位数(mid)
    2. 列值大于mid的项,分组标记为0
    3. 列值小于mid的项,划分为5组:值最低的标记为5,依次递减至1

原始数据

structure(list(entity = c("a", "s", "d", "f", "g", "h", "j", 
"k", "l", "q", "w", "e", "r", "t", "y", "z", "x", "c", "v", "b"
), col1 = c(18, 27, 28, 50, 42, 18, 18, 39, 16, 49, 42, 26, 18, 
38, 15, 50, 18, 10, 36, 22), col2 = c(110, 111, 159, 128, 113, 
123, 128, 122, 167, 167, 113, 185, 129, 104, 180, 123, 152, 111, 
117, 115), col3 = c(85, 69, 64, 96, 55, 99, 73, 55, 50, 62, 66, 
87, 77, 77, 53, 60, 96, 82, 100, 55)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -20L))

解决方案代码

使用dplyr包实现分组逻辑,通过自定义函数批量处理目标列:

library(dplyr)

# 加载数据
df <- structure(list(entity = c("a", "s", "d", "f", "g", "h", "j", 
"k", "l", "q", "w", "e", "r", "t", "y", "z", "x", "c", "v", "b"
), col1 = c(18, 27, 28, 50, 42, 18, 18, 39, 16, 49, 42, 26, 18, 
38, 15, 50, 18, 10, 36, 22), col2 = c(110, 111, 159, 128, 113, 
123, 128, 122, 167, 167, 113, 185, 129, 104, 180, 123, 152, 111, 
117, 115), col3 = c(85, 69, 64, 96, 55, 99, 73, 55, 50, 62, 66, 
87, 77, 77, 53, 60, 96, 82, 100, 55)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -20L))

# 定义分组函数
assign_group <- function(x) {
  mid <- median(x)
  # 处理小于中位数的数值,分成5组并标记5-1
  lower_vals <- x[x < mid]
  lower_groups <- cut(lower_vals, breaks = 5, labels = 5:1)
  # 生成最终分组向量
  res <- rep(0, length(x))
  res[x < mid] <- as.integer(lower_groups)
  res
}

# 批量应用分组函数到目标列
df_result <- df %>%
  mutate(across(c(col1, col2, col3), ~assign_group(.), .names = "Group_{.col}"))

# 查看结果
print(df_result)

运行结果

entitycol1col2col3Group_col1Group_col2Group_col3
a1811085330
s2711169121
d2815964102
f5012896000
g4211355014
h1812399300
j1812873300
k3912255004
l1616750405
q4916762003
w4211366012
e2618587200
r1812977300
t3810477050
y1518053505
z5012360003
x1815296300
c1011182520
v36117100000
b2211555204

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24