如何为R语言中的df添加分组索引(每5行一组共4组)
为数据框添加固定行数分组的索引列
针对你需要每5行分为一组的需求,这里提供两种简洁的实现方式:
方法1:基础R原生操作
利用整数除法结合向上取整的逻辑,直接生成分组列:
# 先创建你的目标数据框 df <- tibble::tribble( ~num_street, ~city, ~sate, ~zip_code, "976 FAIRVIEW DR", "SPRINGFIELD", "OR", 97477L, "19843 HWY 213", "OREGON CITY", "OR", 97045L, "402 CARL ST", "DRAIN", "OR", 97435L, "304 WATER ST", "WESTON", "OR", 97886L, "5054 TECHNOLOGY LOOP", "CORVALLIS", "OR", 97333L, "3401 YACHT AVE", "LINCOLN CITY", "OR", 97367L, "135 ROOSEVELT AVE", "BEND", "OR", 97702L, "3631 FENWAY ST", "FOREST GROVE", "OR", 97116L, "92250 HILLTOP LN", "COQUILLE", "OR", 97423L, "6920 92ND AVE", "TIGARD", "OR", 97223L, "591 LAUREL ST", "JUNCTION CITY", "OR", 97448L, "32035 LYNX HOLLOW RD", "CRESWELL", "OR", 97426L, "6280 ASTER ST", "SPRINGFIELD", "OR", 97478L, "17533 VANGUARD LN", "BEAVERTON", "OR", 97007L, "59937 CHEYENNE RD", "BEND", "OR", 97702L, "2232 42ND AVE", "SALEM", "OR", 97317L, "3100 TURNER RD", "SALEM", "OR", 97302L, "3495 CHAMBERS ST", "EUGENE", "OR", 97405L, "585 WINTER ST", "SALEM", "OR", 97301L, "23985 VAUGHN RD", "VENETA", "OR", 97487L ) # 添加分组索引列 df$group <- ceiling(seq(nrow(df)) / 5)
原理:seq(nrow(df))生成从1到数据总行数的序列,除以5后用ceiling()向上取整,就能得到每5行一组的连续编号。
方法2:使用tidyverse(dplyr)包
如果你习惯用tidyverse的链式语法,可通过mutate()配合row_number()实现:
library(dplyr) df <- df %>% mutate(group = ceiling(row_number() / 5))
原理:row_number()为每一行生成对应的行号,后续逻辑和基础R方法一致,最终得到分组索引。
验证效果
执行任意一种方法后,数据框会新增group列,效果与你期望的完全匹配。你可以用head(df, 10)查看前10行,确认分组是否正确。
内容的提问来源于stack exchange,提问作者C.Robin
相关产品推荐
相关产品推荐

