R:独特(或dplyr distinct)+最近的日期

Z_D*_*Z_D 3 r unique dplyr

我有一个数据框,其中包含基于不同日期的名称重复的信息行.我想将此df过滤为仅包含唯一名称的df,但如果有机会则选择最近出现的名称.我是dplyr的忠实粉丝,之前使用过distinct和select的组合,但是文档似乎无法单独使用它:

"确定唯一性时使用的变量.如果给定的输入组合有多行,则只保留第一行."

这似乎是一个普遍会出现的问题,所以我想知道是否有人有任何建议.下面是一个示例df,它反映了我的真实数据将Names作为字符类,而Date作为POSIXct使用lubridate包生成.

structure(list(Name = c("John", "John", "Mary", "John", "Mary", 
"Chad"), Date = structure(c(1430438400, 1433116800, 1335830400, 
1422748800, 1435708800, 1427846400), tzone = "UTC", class = c("POSIXct", 
"POSIXt"))), .Names = c("Name", "Date"), row.names = c(NA, -6L
), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

期望的结果是:

structure(list(Name = c("John", "Mary", "Chad"), Date = structure(c(1433116800, 
1435708800, 1427846400), class = c("POSIXct", "POSIXt"), tzone = "UTC")), .Names = c("Name", 
"Date"), row.names = c(2L, 5L, 6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

Fra*_*ank 7

最简单的方法是

DF %>% arrange(desc(Date)) %>% distinct(Name)
Run Code Online (Sandbox Code Playgroud)

如果你真的希望名称保持相同的顺序,这些也可以工作(感谢@akrun):

DF %>% group_by(Name) %>% slice(which.max(Date))  # @akrun's better idea
DF %>% group_by(Name) %>% filter(Date==max(Date)) # my idea
Run Code Online (Sandbox Code Playgroud)