我有以下格式的数据框:
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
但这不是我想要的输出,我怎样才能删除旧条目?提前感谢您提供任何线索或提示。
答案 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), ]