根据其唯一ID比较和过滤多行

  • 本文关键字:过滤 比较 ID 唯一 r
  • 更新时间 :
  • 英文 :


我有一个结构为:

的数据框架
id status submissions date
 1 offline 1          2017
 1 online  2          2018
 1 online  3          2006
 2 offline 1          2006
 2 online  4          2018
 2 online  2          2002
 2 online  5          2004

我的问题是,对于每个ID,提交较高的行应该的日期> =前一个。我如何过滤数据框以拥有:

 id status  submissions  date
 1 offline           1  2017
 1 online            2  2018
 2 offline           1  2006
 2 online            4  2018

ive尝试使用dplyr group_by(),然后使用filter(),但不起作用。

不使用过滤器但获取正确输出的整形解决方案:

id <- c(1,1,1,1,2,2,2,2)
status <- c("offline","online","online","offline","online","online","online")
date <- c(2017,2018,2006,2006,2018,2002,2004)
tibble(id,status,date)
df %>%
    group_by(id, status) %>%
    arrange(desc(date)) %>%
    summarize(date = first(date))

它应该屈服您:

 A tibble: 4 x 3
# Groups:   id [?]
     id status   date
  <dbl> <chr>   <dbl>
1     1 offline  2017
2     1 online   2018
3     2 offline  2006
4     2 online   2018

我认为这是一个容易的逻辑流,但这完全是主观的。

使用dplyr,您可以做:

df %>%
 group_by(id) %>%
 filter(row_number() == 1 | submissions > first(submissions) & date >= first(date))
     id status  submissions  date
  <int> <chr>         <int> <int>
1     1 offline           1  2017
2     1 online            2  2018
3     2 offline           1  2006
4     2 online            4  2018

假定offline状态始终是每组第一行。

offline状态不是每组第一行时的情况的可能性:

df %>%
 group_by(id) %>%
 arrange(status, .by_group = TRUE) %>%
 filter(row_number() == 1 | submissions > first(submissions) & date >= first(date))

最新更新