r - 根据最近的条目删除重复的行
问题描述
我很抱歉,因为我知道之前有人问过这个问题的变体,但我试图获得所提供的答案,但无法将其应用于我的数据。
我有以下来自调查结果的数据。有几个人完成了他们参加的各种网络研讨会的调查。如果一个人参加了不止一场网络研讨会,他们可能已经完成了不止一项调查。我只想保留每个人的最新调查结果(即,删除重复项,但保留基于“提交调查日期”列的最新调查提交)。
当前数据示例:
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() 函数删除重复的行。但我不知道如何添加条件以保持最新日期的行。我希望找到一个不太复杂的解决方案。先感谢您!
解决方案
您可以更改日期的类别,DateSurveySubmitted
以arrange
降序排列基于日期的数据,并为每个选择第一行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)
推荐阅读
- mysql - 如何解决我的 codeigniter 批量更新问题?
- python - Codeforces 不接受我的输出,即使它看起来完全一样?
- vue.js - 如何在页面刷新按钮上应用计算类?
- php - 我怎样才能订购这个 MySQL 日期?
- python - 如何将序数添加到文本文件中每一行的开头
- google-cloud-dataflow - 如何获得可读文件?
- android - Nativescript 不使用角度服务正确发送标头
- react-native - 如何绑定 TouchableOpacity 的值
- opencv - 获取字符/三角形失败
- django - 如何在 django 中制作依赖下拉表单