我有像下面这样的数据框,想要根据除了日期之外的所有列找到重复的数据,使用排除的列(日期)来确定要删除哪些行(只保留最近的日期)。这样做不会丢失列。
ID Fn Ln date
1 1 Joe Schmoe 2001-01-01
2 1 Joe Schmoe 2010-01-01
3 6 Joe Schmoe 2001-01-01
4 2 Stacy Fakename 2002-02-02
5 2 Stacy Fakename 2020-02-02
6 3 Craig Collins 2030-03-03
7 3 Craig Collins 2003-03-03
8 4 Leo Fern 2040-04-04
9 4 Leo Fern 2004-04-04
10 5 Penny Diamond 2005-05-05
11 5 Penny Diamond 2050-05-05
字符串
因此,三行Joe Schmoe的代码应该发现只有两行是相同的,其中一行因为ID不同而被取消资格,其余两行除了2010年的日期之外都是相同的。
我最终希望将Joe ID 6和最近的副本(Joe ID 1 Date 2010)这样的唯一性保留在同一个表中,删除旧的副本(Joe ID 1 Date 2001)。
数据
data <- data.frame(ID=c(1, 1, 6, 2, 2, 3, 3, 4, 4, 5, 5),
Fn=c("Joe", "Joe", "Joe", "Stacy", "Stacy", "Craig", "Craig", "Leo", "Leo", "Penny", "Penny"),
Ln=c("Schmoe", "Schmoe", "Schmoe", "Fakename", "Fakename", "Collins", "Collins", "Fern", "Fern", "Diamond", "Diamond"),
date=c("2001-01-01", "2010-01-01", "2001-01-01", "2002-02-02", "2020-02-02", "2030-03-03", "2003-03-03", "2040-04-04", "2004-04-04", "2005-05-05", "2050-05-05")
)
型
1条答案
按热度按时间kpbpu0081#
为每个ID创建一个vector,它给出了基础
integer
日期结构的order
,这可以很容易地用ave
完成。为了确保你有日期,使用as.Date(date)
。最后,简单地为1
sts子集。字符串
型