首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中有重复的情况下保存最近的观测

在R中有重复的情况下保存最近的观测
EN

Stack Overflow用户
提问于 2020-02-24 15:22:39
回答 4查看 876关注 0票数 2

我有以下数据。

代码语言:javascript
复制
  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也等于“狗”,因为级别不同。

所以,我想要的是:

代码语言:javascript
复制
  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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-02-24 15:26:52

使用tidyverse

代码语言:javascript
复制
df %>%
group_by(var1, level) %>%
filter(date == max(date)) %>%
ungroup()
票数 4
EN

Stack Overflow用户

发布于 2020-02-24 15:34:31

在基数R中,使用duplicated。看起来您的数据已经按日期排序了,所以您可以使用

代码语言:javascript
复制
df[!duplicated(df[c("var1", "level")], fromLast = TRUE), ]

(默认情况下,duplicated将为任何事情的第一次出现提供FALSE,而对于其他每一次事件,则提供TRUE。设置fromLast = TRUE将使方向相反,因此最后一次出现的情况保持不变)

如果您不确定您的数据是否已经排序,请先排序!

代码语言:javascript
复制
df = df[order(df$var1, df$level, dfd$date), ]
票数 3
EN

Stack Overflow用户

发布于 2020-02-24 15:43:48

您还可以按照以下方式使用data.table方法:

代码语言:javascript
复制
library(data.table)
setDT(df)[, .SD[which.max(date)], .(var1, level)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60378970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档