R语言如何按Task前10位匹配分组计算Frame列绝对差值
解决方法
你之前的代码没有先按照Task前10位的规则分组,直接对全表计算差值,所以不符合需求。可以用dplyr的分组逻辑实现预期效果,完整代码如下:
library(tidyverse) df %>% # 提取Task前10位作为分组标识 mutate(group_id = substr(Task, 1, 10)) %>% # 按分组标识分组 group_by(group_id) %>% # 组内计算差值 mutate(Diff = ifelse(row_number() == 1 & n() == 2, abs(Frame[1] - Frame[2]), NA_integer_)) %>% # 可选:移除不需要的分组标识列 ungroup() %>% select(-group_id)
逻辑说明
- 首先通过
substr(Task,1,10)提取所有Task前10个字符,作为分组的唯一键,把前10位相同的行归为同一组 - 分组后判断:如果当前是组内第一行、且组内共有2条记录,就计算两条记录Frame的绝对差值填到第一行的Diff列,其余情况Diff留空
- 最后如果不需要分组用的
group_id列,可以用select移除
内容的提问来源于stack exchange,提问作者TeoK
相关产品推荐
相关产品推荐

