R语言如何在存在数据缺失间隔的情况下对列的连续值进行分组
问题原因
原有代码的逻辑是每匹配到一条完整记录就给累计值加1,因此连续的无缺失行也会被拆分为不同的组,不符合分组需求。
调整方案
核心逻辑改为仅在**当前行是完整记录、且前一行是缺失记录(或当前为第一条记录)**时才更新组号,再将存在缺失的行的组号置为NA即可:
首先构造测试数据:
test <- data.frame( a = 1:10, b = c(1,2,3,NA,NA,NA,12,15,NA,25) )
调整后的代码:
library(dplyr) test %>% mutate(is_complete = complete.cases(.), # 仅新的连续完整块开始时累计值加1 group = cumsum(is_complete & !lag(is_complete, default = FALSE)), # 缺失行的组号设为NA group = ifelse(is_complete, group, NA)) %>% select(a, b, group)
输出结果
运行后即可得到目标输出:
a b group 1 1 1 1 2 2 2 1 3 3 3 1 4 4 NA NA 5 5 NA NA 6 6 NA NA 7 7 12 2 8 8 15 2 9 9 NA NA 10 10 25 3
内容的提问来源于stack exchange,提问作者Jhonathan
相关产品推荐
相关产品推荐

