基于DayFLAG变量分组去除重复数据的R语言实现
解决方案
方法1:Base R 实现
利用duplicated()函数基于Name和Incident_Day两列判断重复行,筛选出非重复记录后移除DayFLAG列:
# 模拟数据 df <- data.frame(Name = c(rep("John Snow", 6), rep("Tyrion Lanister", 3), "Arya"), Incident_Day = c(1,1,1,2,2,3,1,2,2,6), DayFLAG = c(T,T,T,T,T,F,F,T,T,F)) # 去重并移除DayFLAG列 df_2 <- df[!duplicated(df[c("Name", "Incident_Day")]), c("Name", "Incident_Day")] # 查看结果 df_2
输出结果:
Name Incident_Day 1 John Snow 1 4 John Snow 2 6 John Snow 3 7 Tyrion Lanister 1 8 Tyrion Lanister 2 10 Arya 6
方法2:dplyr 包实现
用tidyverse风格的代码,两种简洁写法可选:
library(dplyr) # 写法1:用distinct直接去重 df_2 <- df %>% distinct(Name, Incident_Day, .keep_all = FALSE) # 写法2:分组后取每组第一行再移除冗余列 df_2 <- df %>% group_by(Name, Incident_Day) %>% slice_head(n = 1) %>% ungroup() %>% select(-DayFLAG) # 查看结果 df_2
两种写法都能得到你期望的输出,其中distinct()方法更直接,指定需保留唯一值的列即可完成去重。
内容的提问来源于stack exchange,提问作者shollaback
相关产品推荐
相关产品推荐

