我有以下数据。
date var1 level score_1 score_2
2020-02-19 12:10:52.166661 dog n1 1 3
2020-02-19 12:17:25.087898 dog n1 3 6
2020-02-19 12:34:27.624939 dog n2 4 3
2020-02-19 12:35:50.522116 cat n1 2 0
2020-02-19 12:38:49.547181 cat n2 3 4对于任何组合var1 & level,都应该有一个观察结果。我想消除重复,只保留最近的记录。在前面的例子中,第一行应该被删除,因为第2行中的犬类N1是最近的。然而,我想保留第3行,即使var1也等于“狗”,因为级别不同。
所以,我想要的是:
date var1 level score_1 score_2
2020-02-19 12:17:25.087898 dog n1 3 6
2020-02-19 12:34:27.624939 dog n2 4 3
2020-02-19 12:35:50.522116 cat n1 2 0
2020-02-19 12:38:49.547181 cat n2 3 4发布于 2020-02-24 15:26:52
使用tidyverse
df %>%
group_by(var1, level) %>%
filter(date == max(date)) %>%
ungroup()发布于 2020-02-24 15:34:31
在基数R中,使用duplicated。看起来您的数据已经按日期排序了,所以您可以使用
df[!duplicated(df[c("var1", "level")], fromLast = TRUE), ](默认情况下,duplicated将为任何事情的第一次出现提供FALSE,而对于其他每一次事件,则提供TRUE。设置fromLast = TRUE将使方向相反,因此最后一次出现的情况保持不变)
如果您不确定您的数据是否已经排序,请先排序!
df = df[order(df$var1, df$level, dfd$date), ]发布于 2020-02-24 15:43:48
您还可以按照以下方式使用data.table方法:
library(data.table)
setDT(df)[, .SD[which.max(date)], .(var1, level)]https://stackoverflow.com/questions/60378970
复制相似问题