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

基于row_label1与row_label2分组,实现每16行分页且不拆分组的需求

生成不拆分分类的分页变量解决方案

需求明确:每16行分页,但同一row_label1(分类)的所有行必须在同一页,不能跨页拆分;即使当前页未满16行,下一行属于新分类时立即分页(比如示例中page=2需从Height相关行开始)。

以下是R语言实现代码,用dplyr处理逻辑:

library(dplyr)

# 加载你的数据
df <- structure(list(row_label1 = c("Age (years)", "Age (years)", "Age (years)", 
"Age (years)", "Age range, n(%)", "Age range, n(%)", "Age range, n(%)", 
"Race, n(%)", "Race, n(%)", "Race, n(%)", "Gender, n(%)", "Gender, n(%)", 
"Ethnicity, n(%)", "Ethnicity, n(%)", "Height (cm)", "Height (cm)", 
"Height (cm)", "Height (cm)", "Weight (kg)", "Weight (kg)", "Weight (kg)", 
"Weight (kg)", "Body Mass Index (kg/m2)", "Body Mass Index (kg/m2)", 
"Body Mass Index (kg/m2)", "Body Mass Index (kg/m2)", "BMI (kg/m2)", 
"BMI (kg/m2)", "BMI (kg/m2)"), row_label2 = c("n", "Mean (SD)", 
"Median", "Min, Max", "<65", "65-80", ">80", "WHITE", "BLACK OR AFRICAN AMERICAN", 
"AMERICAN INDIAN OR ALASKA NATIVE", "Female", "Male", "Hispanic or latino", 
"Not hispanic or latino", "n", "Mean (SD)", "Median", "Min, Max", 
"n", "Mean (SD)", "Median", "Min, Max", "n", "Mean (SD)", "Median", 
"Min, Max", "<25", "25-<30", ">=30"), groups = c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L)), row.names = c(NA, -29L
), class = c("tbl_df", "tbl", "data.frame"))

# 1. 统计每个分类的行数,确保不拆分单个分类
category_row_counts <- df %>%
  group_by(row_label1) %>%
  summarise(n_rows = n(), .groups = "drop")

# 2. 为每个分类分配页面编号
category_pages <- category_row_counts %>%
  mutate(
    # 累加分类行数
    cumulative_rows = cumsum(n_rows),
    # 判断是否需要开启新页:上一个分类结束后,当前分类加入会超16行则分页
    new_page = ifelse(lag(cumulative_rows, default = 0) >= 16, 1, 0),
    # 生成连续的页面编号
    page = cumsum(new_page) + 1
  )

# 3. 将页面编号映射回原数据框
df_with_page <- df %>%
  left_join(category_pages, by = "row_label1") %>%
  select(-n_rows, -cumulative_rows, -new_page)

# 查看最终结果
print(df_with_page)

逻辑说明

  • 先统计每个row_label1分类的总行数,确保整个分类不会被拆分到两页
  • 通过累加分类行数判断分页时机:如果上一个分类的累计行数已经达到或超过16,下一个分类直接进入新页面;如果当前页剩余空间不足以放下整个新分类,也提前分页(示例中前5个分类累计14行,虽未满16,但下一个分类是新的,所以直接开启page2)
  • 最后通过左连接把页面编号绑定到原数据,保证同一分类的所有行拥有相同的page值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:47:34