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

R语言纵向数据处理:按ID分组将A列首次1之后的观测全部填充为1

实现思路

核心逻辑为:按ID分组后,计算A列的累计最大值。因为A列取值仅为0/1,首次出现1之后累计最大值会一直保持为1,刚好匹配需求规则。

各工具实现代码

Python(pandas)

如果你的数据存为pandas的DataFrame,一行代码即可实现:

import pandas as pd
df['B'] = df.groupby('ID')['A'].cummax()

R(dplyr)

用dplyr的分组操作和累计最大值函数实现:

library(dplyr)
df <- df %>%
  group_by(ID) %>%
  mutate(B = cummax(A)) %>%
  ungroup()

SQL

用窗口函数先定位每个ID首次出现1的行位置,再做判断赋值:

SELECT 
  t1.*,
  CASE WHEN row_number() OVER(PARTITION BY ID ORDER BY 排序字段) >= first_1_pos THEN 1 ELSE 0 END AS B
FROM (
  SELECT 
    *,
    MIN(CASE WHEN A = 1 THEN row_number() OVER(PARTITION BY ID ORDER BY 排序字段) END) OVER(PARTITION BY ID) AS first_1_pos
  FROM 你的表名
) t1

注意:SQL语句里的排序字段需要替换为你表中确定行顺序的字段,比如时间戳、行序号等,没有固定排序规则的话无法确定"首次出现"的位置。

效果验证示例

输入样例:

IDA
10
10
11
10
20
21
21

输出结果:

IDAB
100
100
111
101
200
211
211

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:03:05