我有一个由包含基于不同日期的名称的重复的信息行组成的数据文件。我想将这个df过滤成一个只包含唯一名称的df,但如果有机会的话,也可以选择最近出现的名称。我是dplyr的忠实拥趸,以前使用过不同和选择的组合,但是文档使得这似乎不能仅用它来完成:
“在确定唯一性时使用的变量。如果给定的输入组合有多行,则只保留第一行。”
这似乎是一个常见的问题,所以我想知道是否有人有任何建议。下面是一个示例df,它反映了我的真实数据的名称是一个字符类,日期是我使用lubridate包生成的POSIXct。
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")预期的结果是:
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")谢谢你的帮助。
发布于 2015-07-21 21:38:07
最简单的方法是
DF %>% arrange(desc(Date)) %>% distinct(Name)如果您真的希望将名称保持在相同的顺序中,那么这些名称也可以使用(感谢@akrun):
DF %>% group_by(Name) %>% slice(which.max(Date)) # @akrun's better idea
DF %>% group_by(Name) %>% filter(Date==max(Date)) # my ideahttps://stackoverflow.com/questions/31549898
复制相似问题