用dplyr实现按id分组判断string是否等于组内任意历史滞后值
按分组标记当前值是否在组内既往出现的dplyr实现方案
- 处理规则:按
id字段完成数据集分组后,逐行判断当前行的string值,是否在同分组内排在当前行之前的任意行中出现过 - 适配场景:各组样本数量不固定,无预设组长度假设
- 实现优先级:优先采用
dplyr语法完成逻辑开发
输入输出匹配示例
示例输入数据集代码:
df <- data.frame(id = c(1,1,1,1,2,2,2), string = c('a','b','b','a','a','a','b'))
对应期望输出结果:c(FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE)
可直接运行的实现代码
# 加载dplyr包 library(dplyr) # 完成分组计算 df <- df %>% group_by(id) %>% # 生成标记列:判断当前值是否在同组既往行中出现过 mutate(is_repeated = duplicated(string)) %>% ungroup()
实现逻辑说明
group_by(id)会自动适配不同长度的分组样本,不需要提前设定每组的行数- 组内的
duplicated(string)函数逐行计算:当当前行的string值在组内从首行到当前行上一行的区间中已存在时,返回TRUE,否则返回FALSE - 运行代码后生成的
is_repeated列取值,与示例期望结果完全匹配
内容的提问来源于stack exchange,提问作者Jirka Čep
相关产品推荐
相关产品推荐

