首页 > 解决方案 > 根据最近的条目删除重复的行

问题描述

我很抱歉,因为我知道之前有人问过这个问题的变体,但我试图获得所提供的答案,但无法将其应用于我的数据。

我有以下来自调查结果的数据。有几个人完成了他们参加的各种网络研讨会的调查。如果一个人参加了不止一场网络研讨会,他们可能已经完成了不止一项调查。我只想保留每个人的最新调查结果(即,删除重复项,但保留基于“提交调查日期”列的最新调查提交)。

当前数据示例:

Name <- c("John", "Sara", "Nakita", "John", "Raj")
Webinar Code <- c(4, 4, 4, 2, 4)
Date Survey Submitted <- c("1/1/20", "1/1/20", "1/1/20", "1/15/20", "1/1/20")

期望的结果:

Name <- c("Sara", "Nakita", "John", "Raj")
Webinar Code <- c(4, 4, 2, 4)    
Date Survey Submitted <- c("1/1/20", "1/1/20", "1/15/20", "1/1/20")

我对 R 的了解有限,但到目前为止一直在使用 distinct() 函数删除重复的行。但我不知道如何添加条件以保持最新日期的行。我希望找到一个不太复杂的解决方案。先感谢您!

标签: r

解决方案


您可以更改日期的类别,DateSurveySubmittedarrange降序排列基于日期的数据,并为每个选择第一行Name

library(dplyr)

df %>%
  mutate(DateSurveySubmitted = as.Date(DateSurveySubmitted, '%m/%d/%y')) %>%
  arrange(Name, desc(DateSurveySubmitted)) %>%
  distinct(Name, .keep_all = TRUE)

#    Name WebinarCode DateSurveySubmitted
#1   John           2          2020-01-15
#2 Nakita           4          2020-01-01
#3    Raj           4          2020-01-01
#4   Sara           4          2020-01-01

或者使用group_by并选择每个Name.

df %>%
  mutate(DateSurveySubmitted = as.Date(DateSurveySubmitted, '%m/%d/%y')) %>%
  group_by(Name) %>%
  slice(which.max(DateSurveySubmitted)) %>%
  ungroup

数据

Name <- c("John", "Sara", "Nakita", "John", "Raj")
WebinarCode <- c(4, 4, 4, 2, 4)
DateSurveySubmitted <- c("1/1/20", "1/1/20", "1/1/20", "1/15/20", "1/1/20")
df <- data.frame(Name, WebinarCode, DateSurveySubmitted)

推荐阅读