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

基于不同id分组的另一列最后非空值生成新列

按ID分组,基于另一列最后非0值生成新列

需求:按id字段分组,为每个分组生成新列,新列值为该分组select列中最后一个非0的数值,并填充到分组内所有行。

示例数据

可通过以下R代码生成测试数据:

df <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 
3, 3, 4, 4, 4, 4, 4), select = c(1, 0, 0, 2, 0, 0, 0, 0, 1, 0, 
3, 5, 0, 0, 0, 2, 0, 0, 0, 0)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L))

解决方案(tidyverse 实现)

使用dplyr包的分组操作,提取每组最后一个非0值并填充:

library(dplyr)

result_df <- df %>%
  group_by(id) %>%
  # 筛选出组内select非0的元素,取最后一个作为新列值
  mutate(last_non_zero = last(select[select != 0])) %>%
  ungroup()

# 查看处理后的结果
result_df

结果说明

  • id=1分组:select非0值为1、2,最后一个是2,新列全为2
  • id=2分组:select最后非0值为1,新列全为1
  • id=3分组:select最后非0值为5,新列全为5
  • id=4分组:select最后非0值为2,新列全为2
    完全匹配预期结果。

内容的提问来源于stack exchange,提问作者Nuñes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:35:15