如何在dplyr中实现按分组的数值条件替换操作
实现方案
核心思路是按type分组后,利用累积判断函数cumany()标记出首次出现count为0之后的所有行,统一将这些行的count替换为0即可。
完整代码
首先加载dplyr包:
library(dplyr)
执行数据处理:
# 原始数据 df <- data.frame(time=c(1,2,3,4,1,2,3,4,5), type=c("A","A","A","A","B","B","B","B","B"), count=c(10,0,0,1,8,0,1,0,1)) df_result <- df %>% group_by(type) %>% arrange(time, .by_group = TRUE) %>% # 保证分组内时间按升序排列,兼容原数据顺序混乱的场景,若原数据已按时间排序可省略此行 mutate(count = if_else(cumany(count == 0), 0, count)) %>% ungroup()
结果验证
打印df_result即可得到期望输出:
# A tibble: 9 × 3 time type count <dbl> <chr> <dbl> 1 1 A 10 2 2 A 0 3 3 A 0 4 4 A 0 5 1 B 8 6 2 B 0 7 3 B 0 8 4 B 0 9 5 B 0
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

