我有像下面这样的数据框,想要根据除了日期之外的所有列找到重复的数据,使用排除的列(日期)来确定要删除哪些行(只保留最近的日期).在不丢失列的情况下完成所有这些操作.

   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的代码应该会发现只有两行是相同的.一个是因为身份证是不同的,其余两个是相同的,除了日期,其中2010年一个应该保留.

我最终希望将像Joe ID 6和最近的副本(Joe ID 1日期为2010)这样的唯一项保留在同一个表中,删除旧的副本(Joe ID 1日期为2001).

数据

数据 <- 数据.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")
)

推荐答案

for each ID创建一个向量,该向量给出日期的底层integer struct 的order,这可以很容易地用ave完成.要确保您有日期,请使用as.Date(date).最后,简单地将1stS的子集.

> subset(data, ave(-as.integer(as.Date(date)), ID, FUN=order) == 1L)
   ID    Fn       Ln       date
2   1   Joe   Schmoe 2010-01-01
3   6   Joe   Schmoe 2001-01-01
5   2 Stacy Fakename 2020-02-02
6   3 Craig  Collins 2030-03-03
8   4   Leo     Fern 2040-04-04
11  5 Penny  Diamond 2050-05-05

Data:

data <- data.frame(
  ID = c(1, 1, 6, 2, 2, 3, 3, 4, 4, 5, 5),
  Fn = rep(c("Joe", "Stacy", "Craig", "Leo", "Penny"), rep(3:2, c(1L, 4L))),
  Ln = rep(c("Schmoe", "Fakename", "Collins", "Fern", "Diamond"), rep(3:2, c(1L, 4L))),
  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"
  )
)

R相关问答推荐

使用case_when和Mutate搜索多个列以寻找条件

R gtsummary tBL_summary,包含分层和两个独立分组变量

使用Shiny组合和显示复制和粘贴的数据

将模拟变量乘以多个观测结果中的模拟变量

R:连接值,而不是变量?

使用gcuminc,如何使用逗号格式化风险表?

我不能在docker中加载sf

非线性混合效应模型(NLME)预测变量的置信区间

如何从R ggplot图片中获取SVG字符串?

使用Facet_WRAP时更改框图中线的 colored颜色

方法::slotName如何处理非类、非字符的参数?

给定开始日期和月份(数字),如何根据R中的开始日期和月数创建日期列

从圆到R中的多边形的标绘雷达图

从多面条形图中删除可变部分

减go R中列表的所有唯一元素对

有没有办法定制Plot(allEffects())面板标题?

计算使一组输入值最小化的a、b和c的值

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

Broom.Mixed::Augment不适用于Sample::分析

位置_道奇在geom_point图中不躲避