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

R语言按分组统计数据框列值跨行列变化次数代码排错

错误原因排查

原代码存在两个核心问题,导致统计结果不符合预期:

  • 计算相邻值变化时未按Target分组,直接对全列做滞后运算,会把前一个Target组最后一行值和后一个Target组第一行值的跨组差异误识别为变化点,引入无效计算
  • 后续增加了targ1clicks == 1的过滤条件,把所有「从1变为0」的变化行全部剔除了——这类变化发生后当前行值为0,会被过滤规则排除,比如Target01组内第一次1→0的变化就因此漏算,最终少统计1次。
正确实现方法

直接按分组统计组内相邻值的差异次数即可,不需要额外过滤值为1的行,参考dplyr实现:

library(dplyr)

result <- dat %>%
  group_by(Target) %>%
  summarise(
    # 对每个组,计算当前值和前一个值不等的次数,第一行无前置值返回NA,求和时排除
    change_freq = sum(targ1clicks != lag(targ1clicks), na.rm = TRUE)
  )

运行后输出结果完全符合预期:

# A tibble: 2 × 2
  Target change_freq
  <chr>        <int>
1 01               2
2 02               1

如果要沿用原代码「先筛选变化行再统计」的思路,修正后代码如下:

library(dplyr)

# 按组筛选组内的变化行,排除跨组干扰
change_rows <- dat %>%
  group_by(Target) %>%
  filter(targ1clicks != lag(targ1clicks)) %>%
  ungroup()

# 直接分组计数即可,不需要过滤值为1的行
no.accClicks <- as.data.frame(table(change_rows$Target))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:24:15