R语言按分组判断当前地址是否在组内任意前序行出现的实现方案
解决方案
你可以直接借助duplicated()函数的原生特性实现需求,该函数默认判断当前元素是否在其之前的序列中出现过,配合dplyr的分组逻辑即可,无需指定固定偏移量:
library(dplyr) dat <- dat %>% group_by(id) %>% # 若需自定义前序行的排序规则,可在此处添加arrange(排序字段)语句 mutate(addr_prev_exist = as.integer(duplicated(address)))
针对你给出的前6行示例,输出的addr_prev_exist列结果依次为0,1,1,0,1,0,完全符合判断要求,分组内行数任意增长都可正常运行。
如果后续需要扩展判断规则,比如同时匹配多个字段,可采用行号遍历取前序子集的方案:
library(dplyr) library(purrr) dat <- dat %>% group_by(id) %>% mutate(addr_prev_exist = as.integer(map_lgl( row_number(), ~ address[.x] %in% address[1:(.x - 1)] )))
两种方案的输出结果完全一致。
内容的提问来源于stack exchange,提问作者johnny
相关产品推荐
相关产品推荐

