2015-05-21 1 views
1

У меня есть data.table со списком актеров, однозначно идентифицируемым id, делая вещи на date. Нет ограничений на количество вещей, сделанных actor на конкретном date.R: сокращение по дате и группировке по ID с данными. Таблица

require(data.table) 
set.seed(28100) 
df.in <- data.table(id = sample(1:10, 100, replace=TRUE), 
        date = sample(2001:2012, 100, replace=TRUE)) 

Теперь я хочу подвести итог моего набора данных найти количество вхождений для каждого из интервалов следующей последовательности

sequence <- seq(2000, 2012, 4) 

df.out1 <- as.data.frame(table(cut(df.in$date, breaks = sequence))) 

df.out1 
# Var1 Freq 
# 1 (2000,2004] 35 
# 2 (2004,2008] 27 
# 3 (2008,2012] 38 

Все хорошо. Но теперь вместо подсчета событий я хотел бы подсчитать количество активных участников в каждом интервале, то есть с одним или несколькими вхождениями.

ответ

6

Вы имеете в виду что-то вроде этого?

df.in[, interv := cut(date, sequence)][, .(Actors = length(unique(id))), by = interv] 
#  interv Actors 
#1: (2000,2004]  10 
#2: (2008,2012]  9 
#3: (2004,2008]  10 

В случае, если вы используете версию развития 1.9.5 из GitHub вы могли бы использовать uniqueN() вместо length(unique()).

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