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

如何在R语言中为分组的最后一行赋值?

实现方法

下面提供几种在R中按ID分组并标记每组最后一行的方案:

1. Base R 方法

无需加载额外包,使用ave()函数实现:

a$end.spell <- with(a, ave(seq_along(ID), ID, FUN = function(x) as.integer(seq_along(x) == length(x))))
  • seq_along(ID)生成每行的索引
  • 按ID分组后,判断组内当前行位置是否等于组的总行数,满足则返回1,否则返回0

2. dplyr 方法

适合使用tidyverse生态的用户:

library(dplyr)

a <- a %>%
  group_by(ID) %>%
  mutate(end.spell = as.integer(row_number() == n())) %>%
  ungroup()
  • group_by(ID)按ID分组
  • row_number()获取组内行号,n()获取组的总行数,两者相等即为最后一行,转成整数得到1/0标记

3. data.table 方法

处理大数据集时效率更高:

library(data.table)

setDT(a)[, end.spell := as.integer(.I == .N), by = ID]
  • setDT(a)将数据框转为data.table格式
  • .I表示全局行号,.N表示每组的行数,按ID分组后判断是否为组内最后一行

执行任意一种方法后,你的数据框都会生成期望的end.spell列,结果如下:

ID NUM VAL end.spell
1  A   1   1         0
2  A   2   0         1
3  B   4   1         0
4  B   3   0         1
5  C   6   1         0
6  C   9   0         1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:00:55