R语言中 在有重复的数据中只保留时间最大的一条数据

1. 选出目标字段有重复的数据

这里介绍两种方法:

  1. 通过dplyr包,根据目标字段(key_name)聚合再计数选出条数大于1的数据行
	# 只选出有重复的目标字段
	duplicate_name = df %>% group_by(key_name) 
						%>% summarise(freq = n()) 
						%>% filter(freq > 1) 
						%>% select(key_name)
  1. 通过sqldf包,写sql语句使用having选出计数大于1
	duplicate_name = sqldf("select key_name , count(key_name ) count from df 
						group by key_name  
						having count > 1")$key_name

数据量大的适合推荐使用第二种,速度快很多,且占用少量资源

根据重复名称选出数据

	duplicate_data = df[df$key_name %in% duplicate_name$key_name, ]

2. 在重复的数据行中选出时间最大的数据

	 clear_duplicate_info = duplicate_data %>% group_by(key_name) 
 											%>% filter(date == max(date))

完整代码

应用场景:企业的存续注销都存在的情况,只选出存续的id以及相关数据;根据数据的业务情况,这里采用只保留成立时间最近(即最大)的一条数据

  company_better_distinct = function(df){
    # 数据量大的话,groupby效率太低且占资源,用sqldf速度快很多
    # duplicate_name = df %>% group_by(company_name) %>% summarise(freq=n()) %>% filter(freq>1) %>% select(company_name)
    duplicate_name = sqldf("select company_name, count(company_name) count from df group by company_name having count > 1")$company_name
    other = df[!df$company_name %in% duplicate_name$company_name, ]
    duplicate_info = df[df$company_name %in% duplicate_name$company_name, ]
    clear_duplicate_info = duplicate_info %>% group_by(company_name) %>% filter(esdate == max(esdate))
    clear_duplicate_info = as.data.frame(clear_duplicate_info)
    out = rbind(other, clear_duplicate_info)
    return(out)
  }
  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值