【问题标题】:How to subset a table by date and sequence?如何按日期和顺序对表进行子集化?
【发布时间】:2023-03-31 01:32:02
【问题描述】:

我需要按几个条件对表进行子集化。

df <- data.frame(id=c("A","A","B","B","B","C"), seq=c(1,2,1,2,3,1), date=as.Date(c("2005-10-01", "2008-12-01","2001-03-05","2004-05-09","2008-10-15","2010-02-27")), value=c(20,12,80,55,77,57))


  id  | seq  |     date    | value
 --------------------------------
  A   |  1   | 2005-10-01  |  20
  A   |  2   | 2008-12-01  |  12
  B   |  1   | 2001-03-05  |  80
  B   |  2   | 2004-05-09  |  55
  B   |  3   | 2008-10-15  |  77
  C   |  1   | 2010-02-27  |  57

我需要一种方法来为每个 id 准确返回一个值。具体来说,具有最高序列日期小于或等于给定日期的值。假设说2004-07-01,它应该返回:

id  |  value
--------------
A   |   20
B   |   55
C   |   57

(注意在日期小于第一个日期的特殊情况下,它应该返回seq=1,而不是什么)

这可能吗?一口气?

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

    这样的?

    with(df[df$date >= as.Date("2004-07-01"),], do.call("rbind", lapply(split(data.frame(id, value,seq), id), function(x) x[which.max(x$value), c("id", "value")])))
      id value
    A  A    20
    B  B    77
    C  C    57
    

    【讨论】:

    • 我注意到结果有所不同,但这是因为 id B 的值 55 在所需的起点之前,还是我遗漏了什么?
    • 给定的日期是“终点”。我需要给定日期之前的最后一篇文章。 (除非在给定日期之前没有帖子。那么我只想要第一个帖子)
    • 给定日期之前的最后一个帖子,还是给定日期之前seq值最高的帖子?
    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 2015-02-11
    • 2017-11-14
    • 2018-12-29
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多