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

如何用R计算Bin分组内二进制列间1的位置切换次数

按Bin分组计算列间1的切换次数

原始数据

data <- data.frame(
  COL_A = c(1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1),
  COL_B = c(0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0),
  Bin = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4))

需求

按Bin列分组,统计每组内1从COL_A转移到COL_B(或反向转移)的次数,给原数据框新增一列number_of_switches,每组内该列值保持一致。切换不要求两行连续,只要组内1的所在列发生变化即计数。

期望结果

data <- data.frame(
  COL_A = c(1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1),
  COL_B = c(0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0),
  Bin = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4),
  number_of_switches = c(1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3))

解决方案

使用dplyr包实现分组统计,步骤如下:

  1. 标记每行中1所在的列,全0行标记为NA;
  2. 过滤掉全0行,保留有1的行;
  3. 统计组内1所在列的相邻变化次数,即切换次数;
  4. 将统计结果合并回原数据框,确保每组所有行对应相同的切换次数。

代码实现:

library(dplyr)

data_result <- data %>%
  group_by(Bin) %>%
  # 标记1所在的列
  mutate(current_col = case_when(
    COL_A == 1 ~ "A",
    COL_B == 1 ~ "B",
    TRUE ~ NA_character_
  )) %>%
  # 筛选有1的行
  filter(!is.na(current_col)) %>%
  # 计算切换次数:相邻列不同的次数之和
  summarise(number_of_switches = sum(current_col != lag(current_col), na.rm = TRUE)) %>%
  # 合并回原数据
  right_join(data, by = "Bin") %>%
  # 调整列顺序与期望结果一致
  select(COL_A, COL_B, Bin, number_of_switches) %>%
  arrange(Bin)

# 查看结果
print(data_result)

运行上述代码后,得到的data_result与期望结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:53:19