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

R语言按id分组判断type列第二行后变化及统计变化次数

R数据框按id分组统计type列变化实现方案

需求说明

  • 每个分组内前两行的change_of_type_after_2nd_row字段标记为NA,第二行之后的每一行对比前一行type取值,变化标记为yes,未变化标记为No
  • 统计每个分组内第二行之后type列的总变化次数,同分组所有行的count值保持一致

示例数据

data <- data.frame(
  id = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5), 
  type = c("1e","1e","2d","2h","1c","1c","1e","2d","2h","2j","1e",
           "1e","2e","1e","1e","2h","1c","1c","1c", "1j","1j")
)

实现代码(dplyr版)

这是最简洁易读的实现方式,依赖tidyverse生态的dplyr包:

# 未安装依赖包先执行:install.packages("dplyr")
library(dplyr)

result <- data %>%
  # 按id字段分组
  group_by(id) %>%
  mutate(
    # 计算当前行与上一行type是否存在差异
    type_diff = type != lag(type),
    # 生成变化标记列
    change_of_type_after_2nd_row = case_when(
      row_number() <= 2 ~ NA_character_,
      type_diff ~ "yes",
      TRUE ~ "No"
    ),
    # 统计分组内第二行之后的总变化次数
    count = sum(type_diff[row_number() > 2], na.rm = TRUE)
  ) %>%
  # 移除中间计算用的辅助列
  select(-type_diff) %>%
  ungroup()

结果验证

运行上述代码后得到的result与期望输出完全匹配:

  • id=1分组总变化次数为2,第三、四行均标记为yes
  • id=3分组总变化次数为3,第五行因type未变化标记为No
  • id=4、5分组无变化,count值为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:24:07