R语言dplyr按ID分组统计列中大于0.8的值并标记计数
R分组统计标记实现方案
核心实现代码
直接基于dplyr分组操作即可完成需求,无需复杂循环,完整可运行代码如下:
library(dplyr) result <- tmp %>% group_by(id) %>% mutate( # 标记perc大于等于0.8的行 match_flag = perc >= 0.8, # 统计每组符合条件的总个数 match_count = sum(match_flag), # 定位组内最后一个符合条件的行位置 last_match_row = max(which(match_flag)), # 赋值:仅目标位置填计数,其余位置为NA breakpoint = ifelse(row_number() == last_match_row, match_count, NA_integer_) ) %>% # 移除计算用的中间辅助列 select(-match_flag, -match_count, -last_match_row) %>% ungroup()
逻辑说明
- 代码完全匹配需求:按
id分组后,先识别所有perc >= 0.8的行,统计总数量后,仅把计数值写入组内最后一个符合条件的行的breakpoint列,其余行该列统一赋值为NA - 你提供的预期输出中id=2组的perc数值和原始测试数据有出入(原始数据id=2第一行perc为10.89,预期输出写为1、第二行写为0.89),属于手动录入笔误,代码运行后得到的breakpoint计数和你给出的预期值完全一致:id=1组计数6、id=2组计数2、id=3组计数4,标记位置也完全匹配。
提问时代码格式设置方法
除了你已知的Ctrl+K快捷键,手动标记规则如下:
- 行内嵌入的短代码/函数名/变量名:用1个反引号(
)包裹内容即可,例如group_by()` - 多行完整代码块:在代码段的上方、下方各单独放一行3个连续反引号(
),如果需要语法高亮,可以在上方的三个反引号后标注对应语言,比如r 就会按R语法高亮显示代码。

内容的提问来源于stack exchange,提问作者Solicia
相关产品推荐
相关产品推荐

