1

いくつかの条件でテーブルをサブセット化する必要があります。

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 に対して正確に 1 つの値を返すメソッドが必要です。具体的には、指定された日付以下の日付を持つ最高のシーケンスを持つ値。sayを指定すると、次のように返されます。2004-07-01

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

(日付が最初の日付より前の特別なケースでは、何も返さずに seq=1 を返す必要があることに注意してください)

これは可能ですか?一気に?

4

1 に答える 1

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
于 2013-02-07T09:50:34.880 に答える