如何在R语言数据框中每次出现FALSE时创建新分组?
解决方案:基于布尔值的分组创建
你需要根据a列中FALSE的出现来划分连续分组——每次新的FALSE开启一个新组,后续的TRUE都归属于当前组。这在R里可以用cumsum()函数轻松实现,下面是具体步骤:
1. 还原测试数据框
先把你的数据框还原出来方便验证:
df <- data.frame( a = c(FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE), row.names = 1:11 )
2. 生成目标分组列b
核心逻辑是对a列取反后累计求和:原a列的FALSE(新分组的起点)取反后变为TRUE(对应数值1),TRUE取反后变为FALSE(对应数值0)。cumsum()会逐行累加这些数值,每次遇到原a列的FALSE时,累计值就加1,正好对应新分组的开始;后续的TRUE会保持当前累计值,也就是同一分组。
执行代码:
df$b <- cumsum(!df$a)
3. 验证结果
运行后查看数据框:
print(df)
输出完全符合你的预期:
a b 1 FALSE 1 2 TRUE 1 3 TRUE 1 4 FALSE 2 5 TRUE 2 6 TRUE 2 7 TRUE 2 8 FALSE 3 9 TRUE 3 10 TRUE 3 11 TRUE 3
原理补充
!df$a:将原布尔列反转,把分组起点的FALSE转化为可累加的1,普通行的TRUE转化为不影响累加的0cumsum():通过逐行累加,自动生成连续的分组编号,完美匹配你需要的分组逻辑
内容的提问来源于stack exchange,提问作者Data Mastery
相关产品推荐
相关产品推荐

