2

次のデータセットでしばらく苦労しています:

    id   date       var1 var2     
1   7031 2008-12-01  27  1
2   7031 2009-01-05   6  0
3   7031 2009-02-02   0  3
4   7031 2008-11-01   1  4
5   7500 2009-07-11  30  0
6   7500 2009-10-01   8  0
7   7500 2010-01-01   0  0
8   7041 2009-06-20  26  0
9   7041 2009-08-01   0  0
10  0277 2009-01-01   3  0

id ごとに、ゼロ以外の変数を持つ最後の日付を出力したいと思います。これらのユーザーの時系列は長さが異なります。私は次のような出力を期待しています:

id   last_date
7031 2009-02-02
7500 2009-10-01
7041 2009-06-20
0277 2009-01-01

どんな助けでも大歓迎です!

4

1 に答える 1

5

まず、データをサブセット化してから、次を使用しますaggregate()

サンプルデータは次のとおりです。

x <- read.table(header = TRUE, stringsAsFactors=FALSE, text = "
                id   date       var1 var2     
                1   '7031' 2008-12-01  27  1
                2   '7031' 2009-01-05   6  0
                3   '7031' 2009-02-02   0  3
                4   '7031' 2008-11-01   1  4
                5   '7500' 2009-07-11  30  0
                6   '7500' 2009-10-01   8  0
                7   '7500' 2010-01-01   0  0
                8   '7041' 2009-06-20  26  0
                9   '7041' 2009-08-01   0  0
                10  '0277' 2009-01-01   3  0")

「日付」変数の値が、文字ではなく実際の日付で表されていることを確認してください。

x$date <- as.Date(x$date)

サブセット:

x2 <- with(x, x[!(var1 == 0 & var2 == 0), ])

集計:

aggregate(date ~ id, x2, max)
#     id       date
# 1  277 2009-01-01
# 2 7031 2009-02-02
# 3 7041 2009-06-20
# 4 7500 2009-10-01

サブセット化されたデータの新しいオブジェクトを作成したくない場合は、次を使用することもできます。aggregate(date ~ id, x[!(x$var1 == 0 & x$var2 == 0), ], max)

于 2013-01-23T07:58:52.483 に答える