移除DataFrame重复行保留首行:县域高管面板数据处理需求
问题:清理县域高管面板数据,保留「县域-年份」首次出现的记录
我正在处理一份县域高管的DataFrame,计划开展以「县域-年份」为分析单元的面板研究。但部分年份存在多位县域高管任职的情况,需要移除这类重复行,且始终保留首次出现的行。
初始数据
df <- data.frame(year= c(2000, 2001, 2001, 2002, 2000, 2001, 2002, 2002, 2002), executive.name= c("Johnson", "Smith", "Peters", "Alleghany", "Roberts", "Clarke", "Tollson", "Brown", "Taschen"), district= c(1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002))
期望输出
df.neat <- data.frame(year= c(2000, 2001, 2002, 2000, 2001, 2002), executive.name= c("Johnson", "Smith", "Alleghany", "Roberts", "Clarke", "Tollson"), district= rep(c(1001, 1002), each=3))
解决方案
方法1:Base R实现
利用duplicated()函数,基于district和year的组合判断重复行,筛选出非重复的记录(即每组首次出现的行):
df.neat <- df[!duplicated(df[c("district", "year")]), ]
方法2:dplyr包实现
如果习惯tidyverse风格,可通过分组取首行或distinct()函数完成:
library(dplyr) # 分组后取每组第一行 df.neat <- df %>% group_by(district, year) %>% slice(1) %>% ungroup() # 或用distinct直接去重,保留首次出现的完整行 df.neat <- df %>% distinct(district, year, .keep_all = TRUE)
以上两种方法均能得到符合预期的清理后数据,精准保留每个「县域-年份」组合的第一条记录。
内容的提问来源于stack exchange,提问作者YouLocalRUser
相关产品推荐
相关产品推荐

