如何用R语言基于列值分组生成序号新列?附示例
在R语言中按分组创建序号列的方法
首先构造你的示例数据(方便验证效果):
library(tibble) example_twins <- tibble( family = c("Kelly", "Kelly", "Quin", "Quin"), name = c("Mark", "Scott", "Tegan", "Sara") )
方法1:使用dplyr(tidyverse生态)
这是处理tibble最常用的方式,通过分组后生成组内行号:
library(dplyr) example_twins <- example_twins %>% group_by(family) %>% mutate(n = row_number()) %>% ungroup()
group_by(family):按family列分组mutate(n = row_number()):在每个分组内生成从1开始的连续序号ungroup():取消分组状态(如果后续不需要保留分组,建议加上)
运行后得到的结果:
# A tibble: 4 × 3 family name n <chr> <chr> <int> 1 Kelly Mark 1 2 Kelly Scott 2 3 Quin Tegan 1 4 Quin Sara 2
如果需要先对组内的name排序再生成序号,只需添加arrange步骤:
example_twins <- example_twins %>% group_by(family) %>% arrange(name, .by_group = TRUE) %>% mutate(n = row_number()) %>% ungroup()
方法2:使用Base R(无需额外包)
如果不想加载dplyr,可以用ave函数实现:
example_twins$n <- ave(rep(1, nrow(example_twins)), example_twins$family, FUN = seq_along)
ave函数按family分组,对每个分组应用seq_along生成对应长度的序号序列
内容的提问来源于stack exchange,提问作者Muhammad Irfani
相关产品推荐
相关产品推荐

