R语言:基于多列查找跨门店重复行并标记,保留原数据
R语言:标记跨门店重复的brand+date记录
核心思路
按brand和date分组,判断每组内是否存在多个不同的shop_code:
- 如果是,将该行的
revision设为对应的shop_code - 如果否,
revision留空
具体实现
1. dplyr(tidyverse风格)
适合日常数据处理,代码可读性高:
library(dplyr) df <- df %>% group_by(brand, date) %>% mutate(revision = ifelse(n_distinct(shop_code) > 1, as.character(shop_code), "")) %>% ungroup()
2. data.table(大数据场景)
处理百万级以上数据时效率更优:
library(data.table) setDT(df) df[, revision := if(length(unique(shop_code)) > 1) as.character(shop_code) else "", by = .(brand, date)]
3. 基础R(无依赖)
无需安装额外包,适合轻量场景:
df$revision <- ave(df$shop_code, df$brand, df$date, FUN = function(x) { if(length(unique(x)) > 1) as.character(x) else "" })
效果验证
运行后会得到符合需求的结果:
- 2023-01-04的Renault(门店1、5)、2011-03-30的Ford(门店3、1)这类跨门店重复行,
revision会被标记为对应门店号 - 同一
brand+date下仅单个门店的行,revision保持为空
内容的提问来源于stack exchange,提问作者Andres
相关产品推荐
相关产品推荐

