基于不同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
相关产品推荐
相关产品推荐

