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)
  }
    原文作者:_代达罗斯之殇
    原文地址: https://blog.csdn.net/weixin_41578567/article/details/103262925
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞