R:识别重复行并删除旧条目(按日期)

时间:2016-11-29 23:57:44

标签: r dataframe duplicates

我有以下格式的数据框:

   ID    value    modified
1  AA    30       2016-11-03
2  AB    40       2016-11-04
3  AC    50       2016-11-05
4  AA    60       2016-11-06
5  AB    20       2016-11-07

我想识别ID列的所有重复行,并删除具有相对较旧修改时间的行。所以输出将是:

   ID    value    modified
1  AC    50       2016-11-05
2  AA    60       2016-11-06
3  AB    20       2016-11-07

我正在尝试的代码如下:

ID<-c('AA','AB','AD','AA','AB')
value<-c(30,40,50,60,20)
modified<-c('2016-11-03','2016-11-04','2016-11-05','2016-11-06','2016-11-07')
df<-data.frame(ID=ID,value=value,modified=modified)
df
  ID value   modified
1 AA    30 2016-11-03
2 AB    40 2016-11-04
3 AD    50 2016-11-05
4 AA    60 2016-11-06
5 AB    20 2016-11-07

df[!duplicated(df$ID),]
  ID value   modified
1 AA    30 2016-11-03
2 AB    40 2016-11-04
3 AD    50 2016-11-05

但这不是我想要的输出,我怎样才能删除旧条目?提前感谢您提供任何线索或提示。

2 个答案:

答案 0 :(得分:1)

您可以按如下方式使用dplyr包:

library(dplyr)
library(magrittr)

df %<>% group_by(ID) %>% filter(modified==max(modified))

并且你想要一个新变量的结果

library(dplyr)

df2 <- df %>% group_by(ID) %>% filter(modified==max(modified))

答案 1 :(得分:1)

您可以通过首先按日期对数据框进行排序来解决基本R的问题:

df <- df[order(df[["modified"]], decreasing = TRUE), ]

然后,您可以使用!duplicated解决方案获得最终结果:

df[!duplicated(df$ID), ]