2017-07-25 31 views
2

我的目标是创建一个data.table,其中显示每位艺术家每周的事件总数。此外,我还想添加两列,列出每个艺术家在特定的一周内发生的事件数量和音乐会的数量。计算每个艺术家在R data.table中的每周事件数

我data.table看起来是这样的:

Year_week artist_id type event_id 
17\2  464836  Concert 54446 
17\2  4234234 Festival 6654 
17\3  89543  Concert 5321 
17\3  55211  Concert 85642 
17\4  32167  Concert 43222 
17\4  9876  Concert 13131 

我已经试着用一周的事件总数聚集。但是,由于我对R很新,我感觉我正在做的不是正确的方式。

#number of events per week per artist 
USevents_weekly_total = USevents[, list(number_of_events = .N (unique(event_id))), 
             by=c('Year_week', 'artist_id')] 

什么是data.table中最简单的方法呢?

+1

FWIW,在基础R你会使用'长度(唯一的(...))'和data.table已执行了方便的'在akruns所示uniqueN(...)'回答。 –

回答

2

假设我们需要找到“事项标识” unique元素的个数为“Year_week”,“artist_id”和“艺术家”中,uniqueN功能可用于

USevents_weekly_total <- USevents[, list(number_of_events = uniqueN(event_id)), 
            by=c('Year_week', 'artist_id', 'Artist')] 

或者作为@Frank提到

unique(USevents[, .(Year_week, artist_id, Artist)])[, .N, by=.(Year_week, artist_id)] 
+1

你有一个额外的括号 –

+1

@Moody_Mudskipper THanks捡起它 – akrun

+1

根据我的经验'uniqueN(。),by = ...'可以很慢。我使用的一个繁琐的选择是:'唯一的(DT [,。(x,y,z)])[,.N,by =。(x,y)]' – Frank