2016-09-14 3 views
0

Я хочу cumsum уникального идентификатора пользователя в зависимости от времени, вот данныеcumsum уникального предмет в зависимости от времени

 userid  time 
    1   2014-10-01 
    1   2014-11-16 
    2   2014-11-14 
    1   2014-10-16 
    2   2014-11-16 
    3   2014-10-16 

количество уникального идентификатора на 2014-10-16 2, количество уникального идентификатора до 2014-11-14 равно 3.

Я хочу вернуть матрицу, как этот

 userid  time  count 
    1    2014-10-01   1 
    1    2014-11-16   3 
    2    2014-11-14   3 
    1    2014-10-16   2 
    2    2014-11-16   3 
    3    2014-10-16   2 

Я думаю, я должен использовать cumsum, чтобы сделать это. На самом деле, я нашел эту нить делает аналогичные вещи Cumulative count of unique values in R

Однако, я следую за первый ответ на этот поток, но он не работает на моем случае

+0

Ваш вход и ожидаемое «время» неверны. Я предполагаю, что 'df1 [, count: = uniqueN (userid), time]' может быть то, что вы хотели – akrun

+0

Предполагая, что ваши данные упорядочены по 'time', вы можете искать' dt [, count: = cumsum (! Duplicated (userid))] [, count: = max (count), by = time] ' –

+0

отредактировал вход« время ». – Lucia

ответ

1

Так как кажется, что вы используете data.table (от внешний вид вашей первой версии поста), вот подход с использованием этого пакета:

library(data.table) 
setDT(dt) # just in case it's still a data.frame 
dt[order(time), count := cumsum(!duplicated(userid))][, 
       count := max(count), by = time] 
dt 
# userid  time count 
#1:  1 2014-10-01  1 
#2:  1 2014-11-16  3 
#3:  2 2014-11-14  3 
#4:  1 2014-10-16  2 
#5:  2 2014-11-16  3 
#6:  3 2014-10-16  2 

После упорядочения данных по time мы вычисляем кумулятивное количество уникальных userid-х, а затем получить максимальное количество в единице времени.

Смежные вопросы